Я переопределяю равняние () метод, и я должен знать, является ли объект экземпляром подкласса События (Событие является суперклассом). Я хочу что-то как "obj subclassof Событие". Как это может быть сделано?
Заранее спасибо!
С помощью следующего кода вы можете проверить, является ли объект классом, расширяющим 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
}
Поскольку Адриан немного опередил Я также добавлю способ сделать это с помощью универсального метода.
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
}
Если obj является подклассом Event, то это instanceof. obj является экземпляром каждого класса / интерфейса, от которого он происходит. Итак, по крайней мере, все объекты являются экземплярами Object.
В Java нет прямого метода для проверки подкласса.
instanceof Event
вернет true для любого подкласса objects
Вы можете выполнить getClass ()
для объекта, а затем использовать метод getSuperclass ()
для объекта Class
, чтобы проверить, является ли суперкласс Событие
.
Вы можете посмотреть someObject.getClass (). IsAssignableFrom (otherObject.getClass ());