java - 泛型困惑中的类型删除

标签 java generics collections overloading

我正在阅读泛型中类型删除的概念。在执行下面的代码时,我感到困惑。

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/

相关文章:

java - 使用 enunciate 为列表、数组、 map 等的消息正文生成示例 xml/json?

javascript - TypeScript 泛型创建实例

function - 将 scala 代码概括为函数

java - 哪一个是迭代特定集合元素的最佳方式?

c# - .NET HashTable 与 Dictionary - Dictionary 能一样快吗?

java - JPA 不明确的方法调用 isMember

javascript - 第二个消费者未收到 ActiveMQ 消息

java - 从 Clojure 调用带有可选参数的 java 函数

java - 将字符串值转换为类型

java - 通过使用 Java 8 流对其进行排序将集合转换为 Map