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


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

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

3 ответа:

вы хотите:

Super.class.isAssignableFrom(Sub.class)

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

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

вы хотите знать, если bприсваиваемa:

b.isAssignableFrom(a);

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

a.getSuperclass().equals(b);