2011-04-23 87 views
0

我有class Aclass B延伸AJava泛型幫助

我有一個抽象的class X和一個具體的類Y,延伸X

X我有一個抽象方法具有以下簽名:

public abstract Collection<? extends A> getStuff(); 

Y我實現抽象方法具有以下簽名:

public Collection<B> getStuff(); 

當我試圖做到以下幾點: classX.getStuff().add(B)

它給出了以下投訴:在C中添加(捕獲) ollection不能應用於B

任何幫助,將不勝感激。

+7

什麼是投訴? – 2011-04-23 02:56:13

+0

如果你的問題出現在add()方法中,你爲什麼要討論'getStuff()'的簽名?或者''classX'是'getStuff()'返回的集合? – unholysampler 2011-04-23 03:00:14

+1

你可能想閱讀[協變和反變化](http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)#Java)。 – 2011-04-23 03:01:20

回答

1

您可以將以下示例用作X類。

例如,

public abstract <T extends A> Collection<T> getStuff(); 

您也可以參考this threads

+0

嗯謝謝。這正是我的意圖。出於好奇,我在問題中使用的簽名是什麼(抽象集合 getStuff())與您給出的答案相比較? – Glide 2011-04-23 05:15:18

+0

在你的情況下,集合不能將任何值除null以外的集合。你可以參考這本書(Effective Java By Joshua Bloch) - http://goo.gl/cCrQo – jumperchen 2011-04-23 05:41:23

+0

你能詳細說明爲什麼只有null可以進入Collection ?我認爲簽名意味着任何類型的擴展A – Glide 2011-04-26 18:24:18