为什么我们不能基于泛型类型的列表重载方法

时间:2017-11-23 09:51:05

标签: java generics overloading erasure

我知道由于类型擦除,所有通用参数在编译期间都会被删除,所以如果我们有以下方法

public void addToList(List<Orange> list){}
public void addToList(List<Apple> list){}

在类型擦除之后,他们最终都会看起来像这样。

public void addToList(List list){}

在你考虑到编译器不允许你这样做之前,这一切都是可以理解的

public static void addToList(List<Orange> list){}
public static void main(String args[]){
      List<Apple> list = new Arraylist<>();
      addToList(list); //Error: passing a list of apples to a list of oranges
}

如果我们尝试做这样的事情,编译器就不会让我们,这意味着编译器知道我们列表的泛型类型。所以我很困惑为什么编译器更愿意向我们抛出错误,但假装它不能分辨两个重载方法之间的区别?

0 个答案:

没有答案