Java - является там “subclassof” как instanceof?

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

Заранее спасибо!

22
задан msr 23 April 2010 в 15:25
поделиться

6 ответов

instanceof прекрасно справится с этим.

44
ответ дан 29 November 2019 в 03:23
поделиться

С помощью следующего кода вы можете проверить, является ли объект классом, расширяющим 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 проверяет, принадлежит ли объект указанному классу или подклассу (расширяет или реализует) на любом уровне события.

32
ответ дан 29 November 2019 в 03:23
поделиться

На самом деле 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
}
10
ответ дан 29 November 2019 в 03:23
поделиться

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

0
ответ дан 29 November 2019 в 03:23
поделиться

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

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

1
ответ дан 29 November 2019 в 03:23
поделиться

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

3
ответ дан 29 November 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: