我重写了一个 equals() 方法,我需要知道该对象是否是 Event 子类的实例(Event 是超类)。我想要“obj subclassof Event”之类的东西。这怎么能做?
提前致谢!
我重写了一个 equals() 方法,我需要知道该对象是否是 Event 子类的实例(Event 是超类)。我想要“obj subclassof Event”之类的东西。这怎么能做?
提前致谢!
instanceof
可以处理得很好。
使用以下代码,您可以检查对象是否是扩展 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
,检查对象是否属于指定的类或任何事件级别的子类(扩展或实现)。
真的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
}
你可能想看看someObject.getClass().isAssignableFrom(otherObject.getClass());
Java 中没有直接的方法来检查子类。
instanceof Event
将为任何子类对象返回 true
您可以getClass()
对对象执行操作,然后getSuperclass()
对对象使用方法Class
来检查超类是否为Event
.
如果 obj 是 Event 的子类,那么它就是 instanceof。obj 是它派生自的每个类/接口的实例。所以至少所有对象都是 Object 的实例。