做抽象类A和子类B,B继承A,然后做一个A的List<A> 我想使用B的一个List<B>去取得A的List实例,如下面代码:public class ParentClass {
public int a;
}
public class SubClass extends ParentClass {
private int b;
public final int getB() {
return b;
}
public final void setB(int b) {
this.b = b;
}
}
public class GetList {
public List<ParentClass> getPList() {
List<ParentClass> retValue = new ArrayList<ParentClass>();

SubClass subc = new SubClass();
subc.setB(1);

retValue.add(subc);

return retValue;
}
}
public class TestInhMain {
public static void main(String[] args) {
List<ParentClass> subList = new GetList().getPList();
System.out.println(((SubClass)subList.get(0)).getB()); // 正常
List<SubClass> subList = new GetList().getPList(); // 编译出错!无法转换类型
}
}我主要想做一个抽象类的List,返回给一个继承于抽象类的子类的List,以实现不用为每一个子类写对应的方法。
我尝试了List<? extends ParentClass>和List<ParentClass>两种方法,都不可以直接转换成子类的List。谁知道如果不用强制转换,还有什么方法能实现这种操作?
谢谢

解决方案 »

  1. 类A和子类B,B继承A
    我想使用B的一个List <B>去取得A的List实例ClassCastException:
    List <ParentClass> subList = new GetList().getPList(); List <SubClass> subList = new GetList().getPList(); // 编译出错!无法转换类型 
    把父类强制转转为子类是错误的()
      

  2. 没看明白你到底想干什么!
    写一个接口,然后实际类实现这个接口,然后这个接口的List,不知道符合不符合你的要求。
      

  3. 不强制转换当然会报错了,好比:Object obj = new Integer(1);
    Integer k = obj;会报错一样!
      

类似问题 »