关于Java:将子类列表转换为基类列表

Cast the sub class List to base class List

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is List a subclass of List? Why aren't Java's generics implicitly polymorphic?

我有一个扩展动物的类狗列表,并有以下类型的列表。

1
ArrayList<Animals> animal = new ArrayList<Animals>();

现在我又上了一门课,小狗,它能延伸狗的长度。

有一个List puppy = new ArrayList();

现在,我想把清单animal投给puppy。可以直接做吗?

我可以这样做。

1
2
3
for (Animals ani: animal){
     puppy.add((Puppy) ani)
}

但我想要一个直接铸造的解决方案。有可能吗?


不,除非您将第一个列表定义为:

1
List<? extends Animals> animal;

然后你就能做到:

1
2
List<Puppy> puppy = new ArrayList<Puppy>();
animal = puppy;

首先,您必须在基类中将列表定义为…

1
public ArrayList<? super Animal> ani;

然后将扩展类中的基类列表强制转换为…

1
2
3
ArrayList<? extends Animal> puppy= new ArrayList<Puppy>();
puppy= (ArrayList<? extends Animal>)ani;
List<Puppy> castPuppy = (List<Puppy>)puppy;//here we case the base class list in to derived class list.

注意:它可能通过未选中的异常