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

时间:2018-10-30 12:46:52

标签: java overloading generic-method

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 >的擦除与类中的另一种方法

2 个答案:

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