web-dev-qa-db-fra.com

Comment tester si une classe Java en étend une autre au moment de l'exécution?)

Comment tester si a est une sous-classe de b?

Class<?> a = A.class;
Class<?> b = B.class;
123
Armand

Cherchez-vous:

Super.class.isAssignableFrom(Sub.class)
239
meriton

Si vous voulez savoir si un Class en étend un autre, utilisez Class # isAssignableFrom (Class) . Pour votre exemple, ce serait:

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

Si vous souhaitez savoir si une instance est d'un type particulier ou non, utilisez instanceof:

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

Notez que ceux-ci renverront true si la classe/instance est membre de la hiérarchie des types et ne restreint pas les relations directes superclasse/sous-classe. Par exemple:

// 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 vous souhaitez vérifier les relations directes superclasse/sous-classe, Tim a fourni une réponse également.

79
Rob Hruska

Vous voulez savoir si best assignable à partir dea:

b.isAssignableFrom(a);

De plus, si vous voulez savoir que a est une sous-classe directe de b:

a.getSuperclass().equals(b);
38
Tim Stone