我把这个课作为例子:
public class MyClass<T extends ElementParent> {
private Set<T> elements;
private Set<T> elementsNOK;
public Set<T> getElements() {
return elements;
}
public void setElements(Set<T> elements) {
this.elements = elements;
}
public Set<T> getelementsNOK() {
return listeElementsNOK;
}
public void setElementsNOK(Set<T> eElementsNOK) {
this.elementsNOK = elementsNOK;
}
}
在第一个列表(元素)上进行一些操作后,我想将我的元素添加到第二个列表(elementsNOK):
for (ElementParent ele: myClass.getElements()) {
myClass.getElementsNOK().add(ele);
}
我该怎么办?它告诉我,我可以将类型为ElementParent的对象添加到我的列表中。 我想在我的列表中添加多个不同的对象。所有这些对象都继承自Class ElementParent。
答案 0 :(得分:0)
当您使用变量myClass
时,它必须在声明中进行参数化(假设您没有使用原始类型......这会很糟糕)。所以,让我们说你宣称它是
MyClass<ElementParentSubclass> myClass = new MyClass<ElementParentSubclass>();
注意:在Java 7中,您可以使用菱形来推断声明左侧的类型(即将new MyClass<ElementParentSubclass>()
替换为new MyClass<>()
)
子>
然后,要将第一个列表中的元素添加到第二个列表,它只是
for (ElementParentSubclass elem : myClass.getElements()) {
myClass.getElementsNOK().add(elem);
}
你不能按自己的方式去做的原因是因为列表只接受T类型的元素(在上面的例子中是ElementParentSubclass类型)。因此,虽然ElementParentSubclass是ElementParent,但ElementParent不是ElementParentSubclass。