从超类型的扩展列表返回子类型对象的列表

haz*_*111 3 java generics inheritance extends list

我声明了包含以下元素的列表ClassA:

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

  public SuperList<E> getSomeElements() {
    SuperList<E> resultList = new SuperList<>();
    // creating result list
    return resultList;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一节课ClassB:

public class ClassB extends ClassA  {
  // class definition
}
Run Code Online (Sandbox Code Playgroud)

最后我有SuperListClassB的实例.我希望通过方法从中获取元素getSomeElements()并迭代它:

SuperList<ClassB> bigList;

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

但IntelIJ说的是这样的:

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

我可以做得好吗?

Pau*_*ton 5

它应该是

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

    public SuperList<E> getSomeElements() {
        SuperList<E> resultList = new SuperList<>();
        // creating result list
        return resultList;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果bigList是a SuperList<ClassB>,编译器将知道它bigList.getSomeElements()也是a SuperList<ClassB>.