小编Ser*_*ovs的帖子

Java使用泛型类型参数确定要调用哪个方法?

据我所知,Java在运行时删除泛型类型参数信息.它仅用于编译以执行检查,例如,此特定方法调用是否有效.

今天我遇到了下面这段代码,其中,看似Java,由collection/list类型参数决定,要调用哪个构造函数:

public static class MyClass {
    public MyClass(final Collection<String> coll) {
        System.out.println("Constructor 1");
    }
    public MyClass(final List<Integer> list) {
        System.out.println("Constructor 2");
    }
}
Run Code Online (Sandbox Code Playgroud)

进行以下调用:

new MyClass(new HashSet<String>()); // Constructor 1
new MyClass(new ArrayList<String>()); // Constructor 1
new MyClass(new ArrayList<Integer>()); // Constructor 2
Run Code Online (Sandbox Code Playgroud)

现在,如果我删除类型参数:

public static class MyClass2 {
    public MyClass2(final Collection coll) {
        System.out.println("Constructor 1");
    }
    public MyClass2(final List list) {
        System.out.println("Constructor 2");
    }
}
Run Code Online (Sandbox Code Playgroud)

......同样的电话就像我期望的那样; 使用list参数的构造函数调用适用于"最精确地"满足其需求的构造函数:

new MyClass2(new HashSet<String>()); // Constructor 1
new MyClass2(new ArrayList<String>()); // Constructor 2 …
Run Code Online (Sandbox Code Playgroud)

java generics

26
推荐指数
1
解决办法
2270
查看次数

标签 统计

generics ×1

java ×1