![](/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.