List<Number>
和List<Integer>
是不同的类型:如果是这种情况,为什么不重载以下方法?
public static void iMethod(List<Number> nList){
System.out.println(nList);
}
public static void iMethod(List<Integer> iList){
System.out.println(iList);
}
错误:
iMethod
>的擦除与类中的另一种方法
答案 0 :(得分:3)
Java有一个叫做“类型擦除”的东西,当编译这样的通用代码时会引起类似的问题。编译后,using namespace std;
和List<Number>
都只是普通的List<Integer>
。
答案 1 :(得分:2)
所有通用代码 严格用于编译器。通过一个称为“类型擦除”的过程,编译器 对您的通用代码进行所有验证,然后剥离类型信息 类字节码之外。
换句话说,即使 虽然你写了
List < Integer > myList = new ArrayList<Integer>();
在编译器完成处理后,JVM会看到以前看到的一切 Java 5和泛型:
List myList = new ArrayList();