Подтвердить что ты не робот

Java - есть ли "подкласс", например instanceof?

Im, переопределяющий метод equals(), и мне нужно знать, является ли объект экземпляром подкласса Event (Event - суперкласс). Я хочу что-то вроде "obj subclassof Event". Как это можно сделать?

Спасибо заранее!

4b9b3361

Ответ 1

instanceof может справиться с этим просто.

Ответ 2

В следующем коде вы можете проверить, является ли объект классом, который расширяет Event, но не является экземпляром класса событий.

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

По умолчанию instanceof проверьте, соответствует ли объект указанному классу или подклассу (расширяет или реализует) на любом уровне события.

Ответ 3

Действительно, 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
}

Ответ 4

Вы можете посмотреть someObject.getClass().isAssignableFrom(otherObject.getClass());

Ответ 5

В Java нет прямого метода для проверки подкласса. instanceof Event вернет true для любых объектов подкласса

Вы можете сделать getClass() для объекта, а затем использовать метод getSuperclass() для объекта Class, чтобы проверить, есть ли надкласс Event.

Ответ 6

Если obj является подклассом Event, то это instanceof. obj - это экземпляр каждого класса/интерфейса, из которого он происходит. Таким образом, по крайней мере, все объекты являются экземплярами Object.