¿Cómo puedo probar si a
es una subclase de b
?¿Cómo probar si una clase Java se extiende a otra en el tiempo de ejecución?
Class<?> a = A.class;
Class<?> b = B.class;
¿Cómo puedo probar si a
es una subclase de b
?¿Cómo probar si una clase Java se extiende a otra en el tiempo de ejecución?
Class<?> a = A.class;
Class<?> b = B.class;
¿Usted está buscando:
Super.class.isAssignableFrom(Sub.class)
Si usted quiere saber si es o no un Class
se extiende otra, utilizar Class#isAssignableFrom(Class). Por su ejemplo, sería:
if(B.class.isAssignableFrom(A.class)) { ... }
Si usted está interesado en si es o no es una instancia de un tipo particular, utilizar instanceof
:
A obj = new A();
if(obj instanceof B) { ... }
en cuenta que estos volverán true
si el class/instance es un miembro de la jerarquía de tipos y no es restrictivo para las relaciones directas de superclase/subclase. Por ejemplo:
// 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
Si desea comprobar si hay relaciones directas superclase/subclase, Tim has provided an answer también.
En realidad, B.class.isAssignableFrom (A.class), ya que él quiere saber si A es una subclase de B. – meriton
Ah sí, voy a cambiar eso. Por lo general, los ejemplos son al revés (B que extiende A). –
tricked ya ;-p Muchas gracias por la respuesta detallada; Aunque estoy aceptando el de Meriton, ya que es el OMI más claro. – Armand
¿Quiere saber si b
is assignable froma
:
b.isAssignableFrom(a);
Además, si usted quiere saber que a
es una subclase directa de b
:
a.getSuperclass().equals(b);
gracias por la respuesta, y gracias por usar 'a' y' b' de la pregunta – Armand
Gracias por la respuesta! – trusktr