我声明了包含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>.