List<? extends someObject> list
List<? extends Comparable<? super T>> list
我无法理解第二个代码。据我所知,从第一个代码,它存储任何扩展某些对象的对象,但在第二个代码中是否意味着它存储接口?
答案 0 :(得分:0)
第一个是至少SomeObject
的列表。可能是您无法在列表中插入SomeObject
,如果它是真正的子类列表。以这种方式看待它:
List<? extends Animal> list
这是至少Animal
的某些事情的列表。可能是这种情况,这是一个猫列表,或狗列表。我们不知道,因此?
。无论如何,我们知道我们可以从列表中获得至少Animal
个,但我们不能插入,因为我们不知道列表中的确切类型。
第二个是适用于T
或某些超类的类似实现(或派生接口)的列表。因此,此列表中的所有对象都可用于比较T
个对象。但是,当然,和以前一样,我们无法确定列表用作项目的Comparable
的确切类型,因此我们无法添加任何内容,我们只能以此形式阅读。
修改:展开Comparable<? super T>
:使用super
代替extends
似乎违反直觉。这是因为如果你想比较两件事,你可以通过比较事物本身或事物的任何更高类别来做到这一点。所以,如果我想比较狗,我就足以知道如何比较 animals 。如果我可以比较动物我可以比较任何动物,包括狗,猫等。如果我只知道如何比较猫我可能不知道如何比较狗。因此,如果您想找一个人来比较T
,您必须找一个可以比较T
或T
的任何超类的人。