java - 通用代码中的困惑

标签 java list generics

List<? extends someObject> list
List<? extends Comparable<? super T>> list

我无法理解第二个代码。正如我从第一个代码中了解到的,它存储扩展某个对象的任何对象,但在第二个代码中这是否意味着它存储接口(interface)?

最佳答案

第一个是列表,其中至少包含 SomeObject 。您可能无法插入 SomeObject在列表中,如果它是一个真正的子类的列表。这样看:

List<? extends Animal> list

这是一个至少是 Animal 的列表。 。情况可能是,这是一个猫列表,或者狗列表。我们不知道,因此? 。无论如何,我们知道我们至少可以获得 Animal s 不在列表中,但我们无法插入,因为我们不知道列表中的确切类型。

第二个是适用于 T 的可比较实现(或派生接口(interface))列表。或一些父类(super class)。因此,此列表中的所有对象都可以用于比较 T对象。但是当然,和以前一样,我们无法确定 Comparable 的确切类型。该列表用作项目,因此我们无法添加任何内容,只能以这种形式读取它。

编辑:扩展Comparable<? super T> :使用 super 似乎违反直觉。而不是extends 。这是因为如果你想比较两个事物,你可以通过比较事物本身或事物的任何更高类别来实现。所以,如果我想比较,我知道如何比较动物就足够了。如果我可以比较动物,我就可以比较任何动物,包括狗、猫等。但是,如果我只知道如何比较,我可能不知道如何比较。所以如果你想找人比较T ,你必须寻找可以比较的人T ,或 T 的任何父类(super class) .

关于java - 通用代码中的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35308348/

相关文章:

javax.验证.UnexpectedTypeException : No validator could be found for type:

java - 在图像上添加标记/图钉的最佳方法是什么?

java - 如何偏移 JSilder 上的指针?

python - 在 Python 中创建 "reversed"列表的最佳方法?

python - 保存编号变量

java - 编译器对泛型类型的自动绑定(bind)(类型推断)

java - 使用输入文件创建一个对象并将该对象添加到一个数组中,并让它打印出该数组的信息

Python:在列表字典中使用 Counter

javascript - 为什么 TypeScript 对象不能使用泛型类型进行索引?

java - 将现有泛型转换为菱形语法