【发布时间】:2012-02-06 10:39:38
【问题描述】:
我有三个类(Carnivore、Herbivore 和 Plant)扩展了另一个类(Organism)。如何判断对象属于哪个子类?到目前为止,我有一个具有类名称的属性,但我认为可以使用类似于 javascript 的 typeof 的运算符。 (类似于:Organism typeof Carnivore)
【问题讨论】:
我有三个类(Carnivore、Herbivore 和 Plant)扩展了另一个类(Organism)。如何判断对象属于哪个子类?到目前为止,我有一个具有类名称的属性,但我认为可以使用类似于 javascript 的 typeof 的运算符。 (类似于:Organism typeof Carnivore)
【问题讨论】:
您可以使用instanceof 关键字。
但是,请注意,需要使用它通常是糟糕设计的标志。您通常应该在每个派生类中编写方法覆盖,这样您就不需要明确地检查某个类是什么。
【讨论】:
您可以说if( animal instanceof Carnivore ) 来确定它是Carnivore 还是它的后代,您可以使用if( animal.getClass() == Carnivore.class ) 来找出它是否正是Carnivore 而不是它的后代.
但是,您需要执行此类检查的事实通常意味着您的设计存在缺陷、缺少可覆盖的方法或类似的东西。
【讨论】:
Java 有一个instanceof 运算符。但是,这种类型的东西可能与面向对象的设计相反。
【讨论】:
您可以使用instanceof 运算符
【讨论】:
final Organism organism = new Carnivore(); if(organism instanceof Carnivore){ .... }
objInstance instanceof Carnivore。这里的 objInstance 就是你要测试的对象。
【讨论】:
看看instanceof运营商
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
请注意,虽然很多人认为使用它可能被认为是危险的,但他们甚至与GOTO相比,但它还不错in some cases。你可以使用它,但不是很频繁。
【讨论】: