我有一个如下所示的类(class):
public class MyList<E> {
private List<E> list;
public void setList(List<E> list) {
this.list = list;
}
public List<E> getList() {
return list;
}
}
我读到,在类型删除之后,所有出现的类型参数 E
替换为 Object
。因此,在类型删除之后,该类将变为:
public class MyList {
private List<Object> list;
public void setList(List<Object> list) {
this.list = list;
}
public List<Object> getList() {
return list;
}
}
List<String>
不可分配给List<Object>
。但我们可以通过List<String>
setter 方法如下:
MyList<String> ml = new MyList<String>();
List<String> list = new ArrayList<String>();
ml.setList(list);
这背后的原因是什么?
最佳答案
编译后类型会被删除,但在此之前编译器会检查所有类型是否一致,因此您不能给出 List<Object>
其中 List<String>
预计。
这是 Baeldung's article 的摘录关于类型删除。
The compiler ensures type safety of our code and prevents runtime errors.
关于java - 删除类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608365/