Come verificare se una classe Java ne estende un'altra in fase di esecuzione?


Risposte:


255

Stai cercando:

Super.class.isAssignableFrom(Sub.class)

84

Se vuoi sapere se un Classaltro ne estende un altro, usa Class # isAssignableFrom (Class) . Per il tuo esempio, sarebbe:

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

Se sei interessato a sapere se un'istanza è o meno di un tipo particolare, usa instanceof:

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

Si noti che verranno restituiti truese la classe / istanza è un membro della gerarchia dei tipi e non è restrittiva per dirigere le relazioni superclasse / sottoclasse. Per esempio:

// 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

Se vuoi controllare le relazioni dirette tra superclasse / sottoclasse, anche Tim ha fornito una risposta .


2
In realtà, B.class.isAssignableFrom (A.class), dal momento che vuole sapere se A è una sottoclasse di B.
meriton,

1
Ah sì, lo cambierò. Di solito gli esempi sono al contrario (B che estende A).
Rob Hruska,

ingannato ;-p Mille grazie per la risposta dettagliata; Accetto però Meriton's, in quanto è l'IMO più chiaro.
Armand,

42

Vuoi sapere se b è assegnabile da a :

b.isAssignableFrom(a);

Inoltre, se vuoi sapere che aè una sottoclasse diretta di b:

a.getSuperclass().equals(b);

grazie per la risposta e grazie per l'utilizzo ae bdalla domanda
Armand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.