对泛型列表的限制

时间:2015-12-30 16:29:58

标签: java generics

我把这个课作为例子:

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。

1 个答案:

答案 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。