Java Generics - 从泛型类型调用特定方法

Dan*_*ahr 5 java generics

我尝试深入研究Java Generics,我遇到了以下示例代码描述的问题.

public static void test(Object o) {
    System.out.println("Hello Object!");
}

public static void test(Integer i) {
    System.out.println("Hello Integer!");
}

public static <T> void test(Collection<T> col) {
    for (T item : col) {
        System.out.println(item.getClass().getSimpleName());
        test(item);
    }
}

public static void main (String[] args) throws java.lang.Exception
{
    Collection<Integer> ints = new ArrayList<>();
    ints.add(1);
    test(ints);
}
Run Code Online (Sandbox Code Playgroud)

样本的输出是

Integer
Hello Object!
Run Code Online (Sandbox Code Playgroud)

所有类型在编译时都是明显的.据我所知,Java只保存每个方法的一个编译副本(与C++不同),并且因为没有给出关于参数T的其他约束,所以它被迫调用通用的Object实现.

我的问题是 - 有没有办法为整数调用"Hello Integer"方法Collection<Integer>而不使用运行时类型检查而不重载测试方法?

mic*_*l.z 3

这是不可能的。由于类型擦除, typeCollection<T>将被解析为 type Collection<Object>删除通用方法