Java泛型 - 从泛型方法中调用特定的方法

5

我试图深入了解Java泛型,遇到了以下示例代码描述的问题。

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);
}

样本的输出为:
Integer
Hello Object!

所有类型在编译时都是显然的。据我所知,Java仅保留每个方法的单个编译副本(不像C ++),并且因为没有给出关于参数T的其他约束,所以它被强制调用通用Object实现。
我的问题是 - 是否有任何方法可以在不重载Collection<Integer>的测试方法和不使用运行时类型检查的情况下调用整数的"Hello Integer"方法?

了解一下“类型擦除”。 - bmargulies
谢谢,我熟悉这个概念,但我认为根据我在原始帖中提到的原因,这是不可能的。但仅仅说“不可能”太容易了 - 如果真的可以实现,那我就能学到新东西了。 - Danstahr
3个回答

3

2

1
不,你不能按照你所提供的原因来实现你要求的内容。类型擦除意味着重载只能针对所有类型变量解决一次,并且必须解决为Object。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接