Java - 是否有像instanceof这样的"子类"?

msr*_*msr 22 java equals subclass instanceof

我重写了equals()方法,我需要知道对象是否是Event的子类的实例(Event是超类).我想要像"obj subclassof Event"这样的东西.怎么做到这一点?

提前致谢!

Ken*_*oom 44

instanceof 可以处理就好了.

  • 是的,“如果(mysubclass instanceof Event)//发疯......” (2认同)
  • 好在您甚至不必检查“null” (2认同)

Adr*_*ian 32

使用以下代码,您可以检查对象是否是扩展Event但不是Event类实例本身的类.

if(myObject instanceof Event && myObject.getClass() != Event.class) {
    // then I'm an instance of a subclass of Event, but not Event itself
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,instanceof检查对象是否为指定的类,或者在任何级别的Event上检查子类(扩展或实现).

  • 为什么谢谢先生 :-) 另一种方法是使 Event 抽象或接口,而不用检查您的对象是否是它的具体实例,因为它不可能。 (2认同)

Kev*_*ock 10

真的instanceof应该足够好但是如果你想确定这个类真的是一个子类,那么你可以这样提供检查:

if (object instanceof Event && object.getClass() != Event.class) {
    // is a sub-class only
}
Run Code Online (Sandbox Code Playgroud)

由于阿德里安有点领先于我,我还将添加一种方法,你可以用通用方法做到这一点.

public static boolean isSubClassOnly(Class clazz, Object o) {
    return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz;
}
Run Code Online (Sandbox Code Playgroud)

使用此:

if (isSubClassOnly(Event.class, object)) {
    // Sub-class only
}
Run Code Online (Sandbox Code Playgroud)