2016-02-10 103 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

我爲「可比較」添加了解釋。 –