Как я могу проверить, является ли a
подклассом b
?Как проверить, если один класс java расширяет другой во время выполнения?
Class<?> a = A.class;
Class<?> b = B.class;
Как я могу проверить, является ли a
подклассом b
?Как проверить, если один класс java расширяет другой во время выполнения?
Class<?> a = A.class;
Class<?> b = B.class;
Вы ищете:
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
, если class/instance является членом иерархии типов и не ограничивает прямые отношения суперкласса/подкласса. Например:
// 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
Если вы хотите, чтобы проверить наличие прямых связей суперкласс/подкласс, Tim has provided an answer, а также.
Собственно, это B.class.isAssignableFrom (A.class), так как он хочет знать, является ли A подклассом B. – meriton
А, да, я это изменю. Обычно примеры - это наоборот (B-расширение A). –
tricked ya ;-p Большое спасибо за подробный ответ; Я принимаю Meriton, хотя, поскольку это самая ясная IMO. – Armand
Вы хотите знать, если b
is assignable froma
:
b.isAssignableFrom(a);
Кроме того, если вы хотите знать, что a
является прямым подклассом b
:
a.getSuperclass().equals(b);
спасибо за ответ и спасибо за использование 'a' и' b' из вопроса – Armand
Спасибо за ответ! – trusktr