我试图深入了解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"方法?