¿Cómo probar si una clase java extiende otra en tiempo de ejecución?


¿Cómo probar si a es una subclase de b?

Class<?> a = A.class;
Class<?> b = B.class;
Author: Armand, 2010-08-17

3 answers

¿Estás buscando:

Super.class.isAssignableFrom(Sub.class)
 219
Author: meriton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-17 16:48:41

Si quieres saber si un Class extiende a otro, usa Class#IsAssignableFrom(Class). Para su ejemplo, sería:

if(B.class.isAssignableFrom(A.class)) { ... }

Si está interesado en saber si una instancia es de un tipo particular, use instanceof:

A obj = new A();
if(obj instanceof B) { ... }

Tenga en cuenta que estos devolverán true si la clase/instancia es un miembro de la jerarquía de tipos y no son restrictivos para dirigir relaciones 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 de superclase / subclase, Tim también ha proporcionado una respuesta .

 79
Author: Rob Hruska,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:22

Quieres saber si b es asignable desde a:

b.isAssignableFrom(a);

Además, si quieres saber que a es una subclase directa de b:

a.getSuperclass().equals(b);
 39
Author: Tim Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-17 16:50:03