泛型,方法调用

时间:2019-06-25 21:34:43

标签: java generics

我有点沮丧……我有一个带有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);
}

}

0 个答案:

没有答案