Comment tester si a
est une sous-classe de b
?
Class<?> a = A.class;
Class<?> b = B.class;
Cherchez-vous:
Super.class.isAssignableFrom(Sub.class)
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.
Vous voulez savoir si b
est 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);