0

我知道由于类型擦除,所有泛型参数在编译过程中都会被擦除,所以如果我们有以下方法

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
}

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

4

0 回答 0