我重写了equals()方法,我需要知道对象是否是Event的子类的实例(Event是超类)。我想要像“obj subclassof Event”这样的东西。怎么能这样做?
提前致谢!
答案 0 :(得分:44)
instanceof
可以解决这个问题。
答案 1 :(得分: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
}
默认情况下,instanceof
检查对象是否属于指定的类,或者在任何级别的事件中检查子类(扩展或实现)。
答案 2 :(得分: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
}
答案 3 :(得分:2)
您可能需要查看someObject.getClass().isAssignableFrom(otherObject.getClass());
答案 4 :(得分:1)
Java中没有直接的方法来检查子类。
对于任何子类对象,instanceof Event
将返回true
您可以对该对象执行getClass()
,然后在getSuperclass()
对象上使用Class
方法检查超类是否为Event
。
答案 5 :(得分:0)
如果obj是Event的子类,那么它就是一个instanceof。 obj是它派生自的每个类/接口的实例。所以至少所有对象都是Object的实例。