![](/img/trans.png)
[英]Dog is Animal but list<Dog> is not list<Animal>. How to use it safely in a generic/polymorphic function?
[英]Casting List<Animal> to List<Dog>
我有一个Animal.Class和Dog类,它扩展了Animal.Class
我可以知道是否有一种快速简便的方法吗?
List<Dog> dogList = getAnimalList();
public List<Animal> getAnimalList(){
List<Animal> animalList = new LinkedList<Animal>();
return animalList;
}
除非绝对必要,否则我不希望再看整个动物名单。
dog类只包含一个额外的布尔值以用于其他检查目的。
你的问题并不完全清楚,所以我就解决什么可能是您的问题。
如果你有动物名单,其中包含多种动物:
List<Animal> animals = new ArrayList<>();
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Hippo());
并且您希望将该列表的元素过滤到特定的子类型,然后您需要迭代该列表并检查/强制转换为子类型:
List<Dog> dogs = new ArrayList<>();
for (Animal animal : animals) {
if (animal instanceof Dog) {
dogs.add((Dog)animal);
}
}
使用Guava更容易完成:
List<Dog> dogs = Lists.newArrayList(Iterables.filter(animals, Dog.class));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.