我正在阅读泛型中类型删除的概念。在执行下面的代码时,我感到困惑。
public class CollectionsWild {
void Test(Collection<?> t){
System.out.println("Collection");
}
void Test(List<Integer> t){
System.out.println("List");
}
public static void main(String[] args) {
CollectionsWild o = new CollectionsWild();
o.Test(new ArrayList<String>());
}
}
根据类型删除概念,“List<Integer> t
”被转换为字节码中的“List t”。那么为什么我的方法 test 被调用,它以 Collection 作为参数。它应该调用以 List 作为参数的方法
最佳答案
这与删除无关。重载解析是在编译时完成的。只有一个重载匹配 ArrayList<String>
这就是被选中的那个。如果有多个匹配项,则会选择最具体的匹配项。
在使用相同类型删除进行重载的情况下,在考虑重载解析之前,类型的定义不会编译。
关于java - 泛型困惑中的类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476687/