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


Réponses:


255

Cherchez-vous:

Super.class.isAssignableFrom(Sub.class)

84

Si vous voulez savoir si un en Classétend ou non 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 ou non d'un type particulier, utilisez instanceof:

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

Notez que ceux-ci seront renvoyés truesi la classe / instance est membre de la hiérarchie des types et ne sont pas restrictives pour 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 voulez vérifier les relations directes superclasse / sous-classe, Tim a également fourni une réponse .


2
En fait, il B.class.isAssignableFrom (A.class), puisqu'il veut savoir si A est une sous-classe de B.
meriton

1
Ah oui, je vais changer ça. Habituellement, les exemples sont inversés (B prolongeant A).
Rob Hruska

vous a trompé ;-p Merci beaucoup pour la réponse détaillée; J'accepte cependant celui de Meriton, car c'est l'OMI la plus claire.
Armand

42

Vous voulez savoir si b est attribuable à partir de a :

b.isAssignableFrom(a);

De plus, si vous voulez savoir qu'il as'agit d'une sous-classe directe de b:

a.getSuperclass().equals(b);

merci pour la réponse, et merci d'utiliser aet bde la question
Armand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.