我有一个Animal.Class和Dog类,它扩展了Animal.Class
我是否知道是否有一种快速简便的方法可以做到这一点?
List<Dog> dogList = getAnimalList();
public List<Animal> getAnimalList(){
List<Animal> animalList = new LinkedList<Animal>();
return animalList;
}
除非绝对必要,否则我不希望再看整个动物名单。
dog类只包含一个额外的布尔值,用于其他检查目的。
答案 0 :(得分:6)
Generics inheritance与java继承原则略有不同。您需要使用?
(通配符)
List<? extends Animal> dogList = getAnimalList();
编辑:
答案 1 :(得分:1)
您的问题并不完全清楚,所以我只会解决可能的问题。
如果您有动物名单,其中包含多种动物:
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));