可能重复:
IsList<Dog>
a subclass ofList<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)
}
但我想要直接投射解决方案。有可能吗?
答案 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.
注意:它可能通过未经检查的异常