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

Как проверить, является ли a подклассом b ?

Class<?> a = A.class;
Class<?> b = B.class;
126
задан Armand 17 August 2010 в 16:45
поделиться

3 ответа

Вы ищете:

Super.class.isAssignableFrom(Sub.class)
247
ответ дан 24 November 2019 в 00:50
поделиться

Если вы хотите узнать, расширяет ли класс другой, используйте 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

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

81
ответ дан 24 November 2019 в 00:50
поделиться

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

b.isAssignableFrom(a);

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

a.getSuperclass().equals(b);
38
ответ дан 24 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

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