我声明了包含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
}

最后,我有了带有ClassB实例的SuperList。我想通过getSomeElements()方法从中获取元素并对其进行迭代:
SuperList<ClassB> bigList;

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

但是IntelIJ说了这样的话:

不兼容的类型。必需:ClassB。找到:ClassA。

我可以正确地做吗?

最佳答案

它应该是

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>

08-06 04:20