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

Respuestas:

255

Estás buscando:

Super.class.isAssignableFrom(Sub.class)
Meriton
fuente
84

Si desea saber si un se Classextiende o no a otro, use Clase # isAssignableFrom (Clase) . Para su ejemplo, sería:

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

Si le interesa saber si una instancia es o no de un tipo particular, use instanceof:

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

Tenga en cuenta que estos regresarán truesi la clase / instancia es miembro de la jerarquía de tipos y no es restrictiva 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 verificar las relaciones directas de superclase / subclase, Tim también ha proporcionado una respuesta .

Rob Hruska
fuente
2
En realidad, B.class.is AssableFrom (A.class), ya que quiere saber si A es una subclase de B.
meriton
1
Ah sí, cambiaré eso. Por lo general, los ejemplos son al revés (B extendiendo A).
Rob Hruska
te engañé ;-p Muchas gracias por la respuesta detallada; Sin embargo, acepto el Meriton, ya que es la OMI más clara.
Armand
42

Desea saber si b es asignable desde a :

b.isAssignableFrom(a);

Además, si desea saber que aes una subclase directa de b:

a.getSuperclass().equals(b);
Tim Stone
fuente
gracias por la respuesta, y gracias por usar ay bde la pregunta
Armand