Как проверить, расширяет ли один класс java другой во время выполнения?


Ответы:



84

Если вы хотите знать, Classрасширяет ли один другой другой, используйте Class # isAssignableFrom (Class) . Для вашего примера это будет:

if(B.class.isAssignableFrom(A.class)) { ... }

Если вас интересует, относится ли экземпляр к определенному типу, используйте instanceof:

A obj = new A();
if(obj instanceof B) { ... }

Обратите внимание, что они вернутся, trueесли класс / экземпляр является членом иерархии типов и не ограничивает прямые отношения суперкласса / подкласса. Например:

// if A.class extends B.class, and B.class extends C.class
C.class.isAssignableFrom(A.class); // evaluates to true
// ...and...
new A() instanceof C; // evaluates to true

Если вы хотите проверить прямые отношения суперкласса / подкласса, Тим также предоставил ответ .


2
Фактически, это B.class.isAssignableFrom (A.class), поскольку он хочет знать, является ли A подклассом B.
меритон

1
Ах да, я это изменю. Обычно это наоборот (B расширяет A).
Роб Хруска

обманул ya ;-p Большое спасибо за подробный ответ; Хотя я принимаю меритон, так как это самый ясный ИМО.
Armand

42

Вы хотите знать, можно ли b назначить из a :

b.isAssignableFrom(a);

Кроме того, если вы хотите знать, что aэто прямой подкласс b:

a.getSuperclass().equals(b);

Спасибо за ответ, спасибо за использование aи bза вопрос
Armand
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.