将子类List转换为基类List

时间:2012-05-11 08:49:55

标签: java

  

可能重复:
  Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?

我有一个 Dogs 类列表,它扩展了动物并拥有以下类型的列表。

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

现在我有另一个课程, Puppy ,它扩展了Dogs。

并拥有List<Puppy> puppy = new ArrayList<Puppy>();

现在我想将列表animal转换为puppy。有可能直接做吗?

我可以这样做。

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

但我想要直接投射解决方案。有可能吗?

2 个答案:

答案 0 :(得分:16)

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

,否则它不会直接起作用
List<? extends Animals> animal;

然后你就能做到:

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

答案 1 :(得分:1)

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

public ArrayList<? super Animal> ani;

然后将扩展类中的基类列表转换为...

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.

注意:它可能通过未经检查的异常