haz*_*111 3 java generics inheritance extends list
我声明了包含以下元素的列表ClassA:
public class SuperList<E> extends ArrayList<ClassA> {
public SuperList<E> getSomeElements() {
SuperList<E> resultList = new SuperList<>();
// creating result list
return resultList;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一节课ClassB:
public class ClassB extends ClassA {
// class definition
}
Run Code Online (Sandbox Code Playgroud)
最后我有SuperListClassB的实例.我希望通过方法从中获取元素getSomeElements()并迭代它:
SuperList<ClassB> bigList;
SuperList<ClassB> elements = bigList.getSomeElements();
for(ClassB element : elements){
// do something
}
Run Code Online (Sandbox Code Playgroud)
但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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果bigList是a SuperList<ClassB>,编译器将知道它bigList.getSomeElements()也是a SuperList<ClassB>.