我声明了包含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;
}
}
然后,如果
bigList
是SuperList<ClassB>
,则编译器将知道bigList.getSomeElements()
也是SuperList<ClassB>
。