List<? extends someObject> list
List<? extends Comparable<? super T>> list
我不明白第二个代码。正如我从第一个代码了解到的,它存储了扩展某个对象但是在第二个代码中的任何对象,这是否意味着它存储了接口?混乱的通用代码
List<? extends someObject> list
List<? extends Comparable<? super T>> list
我不明白第二个代码。正如我从第一个代码了解到的,它存储了扩展某个对象但是在第二个代码中的任何对象,这是否意味着它存储了接口?混乱的通用代码
第一个是某些至少是SomeObject
的列表。如果它是真实子类的列表,可能是您的不能在列表中插入。看看这样说:
List<? extends Animal> list
这是一个至少Animal
出头的列表。可能是这种情况,这是一个猫列表,或者狗列表。我们不知道,因此?
。无论如何,我们知道我们至少可以得到Animal
s,但是我们不能插入,因为我们不知道列表中的确切类型。
第二个是适用于T
或某些超类的类似实现(或派生接口)的列表。因此,此列表中的所有对象都可用于比较T
对象。但是,当然,和以前一样,我们不能确定列表使用哪种类型的Comparable
作为项目,所以我们不能添加任何东西,我们只能以这种形式阅读它。
编辑:在Comparable<? super T>
上展开:使用super
而不是extends
可能会违反直觉。这是因为如果你想比较两件事情,你可以通过比较东西本身或任何更高类别来做到这一点。所以,如果我想比较狗,这足以让我知道如何比较动物。如果我可以比较动物我可以比较任何动物,包括狗,猫等。但是,如果我只知道如何比较猫我可能不知道如何比较狗。所以,如果你想找人比较T
,你必须找一个谁可以比较T
,或任何超类T
。
no not at所有。请详细说明 –
我为“可比较 super T>”添加了解释。 –
也许:http://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java –
第二个列表存储任何实现Comparable接口的对象 – Martheen