Как проверить, если один класс 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);