我正在尝试编写一个方法,该方法将返回一个集合(例如 Arraylist),该集合使用泛型声明为包含父类或扩展父类的类。对于此方法,集合中的对象将始终用作父类的实例,但在其他上下文中,它们的使用方式不同,因此它们被分开保存。例如:
import java.util.ArrayList;
import java.util.Collection;
public class TestClass {
public static int PARENTTYPE=0;
public static int CHILDTYPE=1;
Collection<ParentClass> parentHolder=new ArrayList<ParentClass>();
Collection<ChildClass> childHolder=new ArrayList<ChildClass>();
public TestClass(){
}
public Collection<ParentClass> getHolder(int type){
if (type==PARENTTYPE){
return parentHolder;
}else if (type==CHILDTYPE){
return childHolder; //<--incompatible types
}else{
throw new RuntimeException("Not a valid type");
}
}
public static void main(String args[]){
TestClass test=new TestClass();
Collection<ParentClass> col1=test.getHolder(PARENTTYPE);
Collection<ParentClass> col2=test.getHolder(CHILDTYPE);
}
}
public class ParentClass {
}
public class ChildClass extends ParentClass{
}
但是,我在指示的行收到不兼容的类型异常。如何编写方法,以便可以返回声明为包含扩展某个类的任何对象的集合。