[英]Method overloading with collection types doesn't work as expected
Consider the following class with overloaded methods. 考虑以下带有重载方法的类。
public final class TeaParty {
private void travellerListed( Collection o) {
System.out.println("travellerListed(Collection<?>)");
}
private void travellerListed( List s) {
System.out.println("travellerListed(List<Number>)");
}
private void travellerListed( ArrayList i) {
System.out.println("travellerListed(ArrayList<Integer>)");
}
private void method(List t) {
travellerListed(t) ;
}
public static void main(String[] args) {
TeaParty test = new TeaParty();
test.method(new ArrayList ());
}
}
I'm expecting "travellerListed(ArrayList)" as output. 我期望“ travellerListed(ArrayList)”作为输出。 But I get "travellerListed(Collection)". 但是我得到“ travellerListed(Collection)”。 What cause for this unexpected overloading ? 是什么原因导致这种意外的过载?
实际上,您发布的代码会导致"travellerListed(List<Number>)"
,因为您将ArrayList
传递给了参数类型为List
method
,因此对于对travellerListed
的调用,编译器选择了private void travellerListed( List s)
,因为方法重载分辨率由参数的编译时类型决定(这意味着不能选择private void travellerListed( ArrayList i)
),并且List
是比Collection
更具体的类型(这说明了为什么private void travellerListed( Collection o)
为什么) private void travellerListed( Collection o)
未选中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.