检查对象是否属于Java中的类

chi*_*der 63 java polymorphism

有没有一种简单的方法来验证对象属于给定的类?例如,我能做到

if(a.getClass() = (new MyClass()).getClass())
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

但这需要每次动态实例化一个新对象,只是丢弃它.有没有更好的方法来检查"a"属于"MyClass"类?

小智 157

instanceof其他答案所描述的关键字通常是您想要的.请记住,这instanceof也将返回true超类.

如果要查看对象是否是类的直接实例,可以比较该类.您可以通过获取实例的类对象getClass().并且您可以通过静态访问特定类ClassName.class.

例如:

if (a.getClass() == X.class) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果a是实例,则条件为真X,但不是if a的子类的实例X.

相比下:

if (a instanceof X) {
    // do something
  }
Run Code Online (Sandbox Code Playgroud)

在该instanceof示例中,如果a是实例X,或者if a子类的实例,则条件为真X.

大多数时候,instanceof是对的.


gde*_*ohn 21

如果您需要动态执行此操作,可以使用以下方法,

if (clazz.isInstance(a)) {
      // do something
}
Run Code Online (Sandbox Code Playgroud)

在哪里clazz是一个实例Class.


Jac*_*kin 16

使用instanceof运营商:

if(a instanceof MyClass)
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)


Jus*_*ler 6

我同意使用instanceof已经提到的。

using 的另一个好处instanceof是,当与of的null引用一起使用时instanceof将返回false,而a.getClass()将抛出一个NullPointerException


Kos*_*Kos 5

试试运营商instanceof