java - 为什么泛型类型不适用于参数扩展父类(super class)?

标签 java generics extends

这是我一直试图找到解决方案的问题。

我们有两个类定义。两个中的一个扩展了另一个。

    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/

相关文章:

java - java中内部类初始化的泛型数组

typescript - TypeScript 中的 'extends' 和 'implements' 有什么区别

java - java "incompatible types"的原因是什么?

java - 当你有小段时,如何显示每条可能采取的路径?

java - 运行旧版本的Jar文件

Java 递归和二叉树

javascript - 在 JS 中扩展类,无需构造函数或 super()

java - "Cannot find symbol: method damage(int)"

c# - C# 中非泛型接口(interface)的泛型成员实现的类型约束

generics - 检查对象是否是 Kotlin 中的多种类型之一