具有不同参数化类型参数的重载方法

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