26

我重写了一个 equals() 方法,我需要知道该对象是否是 Event 子类的实例(Event 是超类)。我想要“obj subclassof Event”之类的东西。这怎么能做?

提前致谢!

4

6 回答 6

49

instanceof可以处理得很好。

于 2010-04-23T15:26:35.457 回答
35

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

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

默认情况下instanceof,检查对象是否属于指定的类或任何事件级别的子类(扩展或实现)。

于 2010-04-23T15:33:35.017 回答
10

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

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

由于 Adrian 有点领先于我,我还将添加一种方法,您可以使用通用方法来做到这一点。

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

通过以下方式使用它:

if (isSubClassOnly(Event.class, object)) {
    // Sub-class only
}
于 2010-04-23T15:37:56.017 回答
3

你可能想看看someObject.getClass().isAssignableFrom(otherObject.getClass());

于 2010-04-23T15:29:35.003 回答
1

Java 中没有直接的方法来检查子类。 instanceof Event将为任何子类对象返回 true

您可以getClass()对对象执行操作,然后getSuperclass()对对象使用方法Class来检查超类是否为Event.

于 2010-04-23T15:27:57.417 回答
0

如果 obj 是 Event 的子类,那么它就是 instanceof。obj 是它派生自的每个类/接口的实例。所以至少所有对象都是 Object 的实例。

于 2010-04-23T15:27:44.570 回答