![](/img/trans.png)
[英]How do I check both 'instanceof' and also the Generic type of a Java object at runtime?
[英]How do I check for the following instanceof in Java?
我正在尋找一種更好的方法來執行以下操作:
class Animal {}
class Dog extends Animal
class Cat extends Animal
class Rat extends Animal
class Bat extends Animal
.. 50 such animals
現在,我有了動物List<Animal>
。
我想做這樣的事情:
for (Animal animal : animalList) {
if (animal instanceof (Dog or Cat or 1 of 10 such animals) ) {
//do something with animal.
}
}
如果動物除了進行10次instanceof檢查外,有什么好的方法來檢查該動物是否為子列表的實例?
直接方法是:
for (Animal animal : animalList) {
for (Class clz : myClassSubList) {
if (clz.isInstance(animal)) {
//do something with animal.
break;
}
}
}
編輯:根據@shmosel的評論
擴展對Rogue的評論:
使用Animal方法來區Animal.isMammal()
類,例如Animal.isMammal()
或Animal.hasFourLegs()
然后,子類具有屬性,如Dog.isMammal = true
或Bat.hasFourLegs = false
abstract class AnimalSubgroup extends Animal
class Dog extends AnimalSubgroup
class Cat extends AnimalSubgroup
if (animal instanceof AnimalSubgroup) {
// do thing
}
這種方法的另一個優點是,如果這些動物具有共同的屬性或方法,則可以將它們放入抽象類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.