Return 超类型扩展列表中的子类型对象列表
Return list of subtype object from extended list of supertype
我声明了包含 ClassA
元素的列表:
public class SuperList<E> extends ArrayList<ClassA> {
public SuperList<E> getSomeElements() {
SuperList<E> resultList = new SuperList<>();
// creating result list
return resultList;
}
}
我有一个 class 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>
。
我声明了包含 ClassA
元素的列表:
public class SuperList<E> extends ArrayList<ClassA> {
public SuperList<E> getSomeElements() {
SuperList<E> resultList = new SuperList<>();
// creating result list
return resultList;
}
}
我有一个 class 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>
。