具有不同参数化类型参数的重载方法
Overloading method with different parameterized type parameter
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);
}
错误:
Erasure of iMethod<List<integer>> is same as another method in class
Java 有一个叫做 "type erasure" 的东西,它在编译这样的通用代码时会导致这样的问题。编译时,List<Number>
和 List<Integer>
都是普通的 List
.
你所有的通用代码
严格针对编译器。通过一个名为 "type erasure," 的过程,编译器
对您的通用代码进行所有验证,然后去除类型信息
在 class 字节码之外。
也就是说,即使
虽然你写了
List < Integer > myList = new ArrayList<Integer>();
当编译器完成它时,JVM 看到它以前总是看到的东西
Java 5 和仿制药:
List myList = new ArrayList();
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);
}
错误:
Erasure of iMethod<List<integer>> is same as another method in class
Java 有一个叫做 "type erasure" 的东西,它在编译这样的通用代码时会导致这样的问题。编译时,List<Number>
和 List<Integer>
都是普通的 List
.
你所有的通用代码 严格针对编译器。通过一个名为 "type erasure," 的过程,编译器 对您的通用代码进行所有验证,然后去除类型信息 在 class 字节码之外。
也就是说,即使 虽然你写了
List < Integer > myList = new ArrayList<Integer>();
当编译器完成它时,JVM 看到它以前总是看到的东西 Java 5 和仿制药:
List myList = new ArrayList();