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/