2016-02-10 65 views
1
List<? extends someObject> list 
List<? extends Comparable<? super T>> list 

我不明白第二个代码。正如我从第一个代码了解到的,它存储了扩展某个对象但是在第二个代码中的任何对象,这是否意味着它存储了接口?混乱的通用代码

+0

也许:http://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java –

+1

第二个列表存储任何实现Comparable接口的对象 – Martheen

回答

0

第一个是某些至少是SomeObject的列表。如果它是真实子类的列表,可能是您的不能在列表中插入。看看这样说:

List<? extends Animal> list 

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

第二个是适用于T或某些超类的类似实现(或派生接口)的列表。因此,此列表中的所有对象都可用于比较T对象。但是,当然,和以前一样,我们不能确定列表使用哪种类型的Comparable作为项目,所以我们不能添加任何东西,我们只能以这种形式阅读它。

编辑:在Comparable<? super T>上展开:使用super而不是extends可能会违反直觉。这是因为如果你想比较两件事情,你可以通过比较东西本身或任何更高类别来做到这一点。所以,如果我想比较,这足以让我知道如何比较动物。如果我可以比较动物我可以比较任何动物,包括狗,猫等。但是,如果我只知道如何比较猫我可能不知道如何比较。所以,如果你想找人比较T,你必须找一个谁可以比较T,或任何超类T

+0

no not at所有。请详细说明 –

+0

我为“可比较”添加了解释。 –