当我使用泛型时,在某些类中出现错误。我指定了哪里出错。我无法摆脱它。我尝试了演员阵容,以及我能想到的所有事情。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