【问题标题】:Return list of subtype object from extended list of supertype从超类型的扩展列表返回子类型对象的列表
【发布时间】:2015-11-29 23:26:04
【问题描述】:

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

不兼容的类型。要求:B 级。找到:A 类。

我可以正常做吗?

【问题讨论】:

    标签: java list generics inheritance extends


    【解决方案1】:

    应该是

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

    那么,如果bigListSuperList&lt;ClassB&gt;,编译器就会知道bigList.getSomeElements() 也是SuperList&lt;ClassB&gt;

    【讨论】:

    • 没问题。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多