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

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

Class<?> a = A.class;
Class<?> b = B.class;

Ответы [ 3 ]

238 голосов
/ 17 августа 2010

Вы ищете:

Super.class.isAssignableFrom(Sub.class)
79 голосов
/ 17 августа 2010

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

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

38 голосов
/ 17 августа 2010

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

b.isAssignableFrom(a);

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

a.getSuperclass().equals(b);
...