从超类型

时间:2015-11-29 23:26:04

标签: java list generics inheritance extends

我声明了包含ClassA

元素的列表
public class SuperList<E> extends ArrayList<ClassA> {

  public SuperList<E> getSomeElements() {
    SuperList<E> resultList = new SuperList<>();
    // creating result list
    return resultList;
  }
}

我有一个班级ClassB

public class ClassB extends ClassA  {
  // class definition
}

最后我有SuperList个ClassB实例。我希望通过方法getSomeElements()从中获取元素并迭代它:

SuperList<ClassB> bigList;

SuperList<ClassB> elements = bigList.getSomeElements();
for(ClassB element : elements){
  // do something
}

但是IntelIJ说的是这样的:

  

不兼容类型。必需:ClassB。发现:ClassA。

我可以正确地做到吗?

1 个答案:

答案 0 :(得分:5)

应该是

public class SuperList<E extends ClassA> extends ArrayList<E> {

    public SuperList<E> getSomeElements() {
        SuperList<E> resultList = new SuperList<>();
        // creating result list
        return resultList;
    }
}

然后,如果bigListSuperList<ClassB>,则编译器会知道bigList.getSomeElements()也是SuperList<ClassB>