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

我声明了包含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说的是这样的:

Incompatibile types. Required: ClassB. Found: ClassA.

我可以做得好吗?

解决方法:

它应该是

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

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

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

上一篇:java 继承


下一篇:日常Java 2021/10/6