Wie kann ich testen, ob a
eine Unterklasse von b
ist?Wie testet man, ob eine Java-Klasse zur Laufzeit eine andere erweitert?
Class<?> a = A.class;
Class<?> b = B.class;
Wie kann ich testen, ob a
eine Unterklasse von b
ist?Wie testet man, ob eine Java-Klasse zur Laufzeit eine andere erweitert?
Class<?> a = A.class;
Class<?> b = B.class;
Suchen Sie:
Super.class.isAssignableFrom(Sub.class)
Wenn Sie wissen wollen, ob ein Class
anderen erstreckt, verwenden Class#isAssignableFrom(Class). Für Ihr Beispiel wäre es:
if(B.class.isAssignableFrom(A.class)) { ... }
Wenn Sie interessiert sind, ob eine Instanz eines bestimmten Typs, verwenden instanceof
:
A obj = new A();
if(obj instanceof B) { ... }
Beachten Sie, dass diese true
zurück, wenn die class/instance ist ein Mitglied der Typhierarchie und ist nicht auf direkte Oberklassen-/Unterklassenbeziehungen beschränkt. Zum Beispiel:
// 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
Wenn Sie für die direkte Oberklasse/Unterklasse Beziehungen zu überprüfen, Tim has provided an answer auch.
Eigentlich ist es B.class.isAssignableFrom (A.class), da er wissen will, ob A eine Unterklasse von B. – meriton
ist. Ah ja, ich werde das ändern. In der Regel sind die Beispiele umgekehrt (B erweitert A). –
ausgetrickst ya ;-p Vielen Dank für die ausführliche Antwort; Ich akzeptiere meritons, da es die klarste IMO ist. – Armand
Sie wollen, wenn b
is assignable froma
wissen:
b.isAssignableFrom(a);
Außerdem, wenn Sie wissen wollen, dass a
eine direkte Unterklasse von b
ist:
a.getSuperclass().equals(b);
danke für die Antwort und danke für die Verwendung von 'a' und' b' aus der Frage – Armand
Danke für die Antwort! – trusktr