當我使用泛型時,在某些類中出現錯誤。我指定了哪裏出錯。我無法擺脫它。我嘗試了演員陣容,以及我能想到的所有事情。Java泛型的問題
class UltraTable<O extends Object> {
public void setContent(Collection<O> collection) {
}
}
class ObjectA {
}
class AShell {
protected UltraTable<? extends ObjectA> tableA;
protected List<? extends ObjectA> getAObjects() {
return null; // the list is created here
}
}
class BShell extends AShell {
public BShell() {
tableA.setContent(getAObjects()); // THE ERROR IS HERE!
}
}
我怎樣才能使它改變只在BShell
類的工作,如果可能的話?
該錯誤消息我得到的是:
The method setContent(Collection<capture#1-of ? extends ObjectA>)
in the type UltraTable<capture#1-of ? extends ObjectA>
is not applicable for the arguments (List<capture#2-of ? extends ObjectA>)
更新:
如果我改變我的代碼托馬斯·榮格說,我在tableA
構造獲得其他類錯誤和方法getAObjects()
:
class ObjectX extends ObjectA {}
class XShell extends AShell {
public XShell() {
tableA = new UltraTable<ObjectX>();
tableA.setContent(getAObjects()); // THE SAME ERROR AS ABOVE
}
@Override
protected List<ObjectX> getAObjects() {
return null;
}
}
我經常有一個UltraTable,getAObjects()返回一個擴展BaseClass的DerivedClass列表。這應該適用於所有情況。
無論如何,我認爲錯誤信息是不合邏輯:「...... <capture#1-of ? extends ObjectA>
是不適用的參數(List<capture#2-of ? extends ObjectA>
)」
捕獲#1和捕捉#2都擴展對象A!這裏有什麼問題?
ps。做很多單元測試。 – chrisg 2009-11-16 02:24:27