这是我一直试图找到解决方案的问题。
我们有两个类定义。两个中的一个扩展了另一个。
class T{}
class TT extends T{}
要求是要有一个list keeps object extends T
List<? extends T> list = new ArrayList<>();
但是当我尝试放置一个 TT 对象时出现了问题(几乎看不出它是 T 的子类)
进入列表。
list.add(new TT());
编译错误信息
类型 List 中的方法 add(capture#2-of ? extends Cell) 不适用于参数 (Cell)
最佳答案
您可以创建一个 List<T> list = new ArrayList<T>();
直接,这可以允许 T 的所有子类型进入列表。这其实有点难理解。当您将其声明为
List<? extends T> list = ...
这意味着它可以允许 T
的任何未知子类型进入列表。但是,根据该声明,我们无法确定哪个是 T
的确切子类型。 .所以,我们只能加上null
进去
关于java - 为什么泛型类型不适用于参数扩展父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21452966/