我声明了包含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说的是这样的:
不兼容类型。必需:ClassB。发现:ClassA。
我可以正确地做到吗?
答案 0 :(得分: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>
。