Im, переопределяющий метод equals(), и мне нужно знать, является ли объект экземпляром подкласса Event (Event - суперкласс). Я хочу что-то вроде "obj subclassof Event". Как это можно сделать?
Спасибо заранее!
Im, переопределяющий метод equals(), и мне нужно знать, является ли объект экземпляром подкласса Event (Event - суперкласс). Я хочу что-то вроде "obj subclassof Event". Как это можно сделать?
Спасибо заранее!
instanceof
может справиться с этим просто.
В следующем коде вы можете проверить, является ли объект классом, который расширяет 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
}
Поскольку Адриан немного опередил меня, я также добавлю способ сделать это с помощью метода общего назначения.
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.