我有点沮丧……我有一个带有String参数的SomeClass实例。我引用了SomeClass实例,第一个是SomeClass<String>
类型,第二个只是SomeClass
类型。该引用调用方法test(...)发送List<String>
作为参数。与参数的链接正在尝试调用方法test(Collection collection)
,而“原始”类型的链接正在调用test(List<Integer> collection)
,当然我们会得到类强制转换异常... 但是主要的问题是为什么他们试图调用不同的方法 ???
public class SomeClass<T> {
public void test(List<Integer> collection) {
System.out.println("Generic method.");
for (Integer element : collection) {
System.out.println(element);
}
}
public void test(Collection collection) {
System.out.println("Collection method.");
for (Object element : collection) {
System.out.println(element);
}
}
public static void main(String[] args) {
SomeClass<String> sc1 = new SomeClass<>();
SomeClass sc2 = sc1;
List<String> list = Arrays.asList("one", "two", "three");
//calls test() with Collection argument
sc1.test(list);
//calls test() with List<Intege>
sc2.test(list);
}
}