簡體   English   中英

如何在Java中檢查以下instanceof?

[英]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 = trueBat.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM