Как проверить, если один класс java расширяет другой во время выполнения?
как я могу проверить, если a является наследником b?
Class<?> a = A.class;
Class<?> b = B.class;
3 ответа:
если вы хотите знать, является ли или нет
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);