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

3

我声明了一个列表,其中包含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。

我应该怎么正确处理呢?

1个回答

5

它应该是

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>


没问题,很高兴能帮忙。 - Paul Boddington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接