Comment tester si une classe java étend une autre lors de l'exécution?
-
29-09-2019 - |
Question
Comment je tester si a
est une sous-classe de b
?
Class<?> a = A.class;
Class<?> b = B.class;
La solution
Vous recherchez:
Super.class.isAssignableFrom(Sub.class)
Autres conseils
Si vous voulez savoir si oui ou non un Class
étend une autre, utilisez classe # IsAssignableFrom (classe) . Pour exemple, il serait:
if(B.class.isAssignableFrom(A.class)) { ... }
Si vous êtes intéressé à savoir si ou non une instance est d'un type particulier, l'utilisation instanceof
:
A obj = new A();
if(obj instanceof B) { ... }
Notez que ceux-ci reviendront true
si la classe / instance est membre de la hiérarchie de type et ne sont pas restrictives pour diriger superclasse / sous-classe relations. 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 voulez vérifier les relations superclasse directe / sous-classe, Tim a fourni une réponse ainsi.
Vous voulez savoir si b
est cessible de a
:
b.isAssignableFrom(a);
En outre, si vous voulez savoir que a
est une sous-classe directe de b
:
a.getSuperclass().equals(b);