Wie teste ich, ob eine Java-Klasse zur Laufzeit eine andere erweitert?


Antworten:


255

Suchen Sie:

Super.class.isAssignableFrom(Sub.class)

84

Wenn Sie wissen möchten, ob ein Classanderer erweitert wird, verwenden Sie Class # isAssignableFrom (Class) . Für Ihr Beispiel wäre es:

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

Wenn Sie daran interessiert sind, ob eine Instanz von einem bestimmten Typ ist oder nicht, verwenden Sie instanceof:

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

Beachten Sie, dass diese zurückgegeben werden, truewenn die Klasse / Instanz Mitglied der Typhierarchie ist und nicht auf direkte Beziehungen zwischen Oberklassen und Unterklassen beschränkt ist. Beispielsweise:

// 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 nach direkten Beziehungen zwischen Oberklassen und Unterklassen suchen möchten, hat Tim ebenfalls eine Antwort gegeben .


2
Eigentlich ist es B.class.isAssignableFrom (A.class), da er wissen will, ob A eine Unterklasse von B. ist
Meriton

1
Ah ja, das werde ich ändern. Normalerweise sind Beispiele umgekehrt (B erweitert A).
Rob Hruska

tricked ya ;-p Vielen Dank für die ausführliche Antwort; Ich akzeptiere jedoch Meritons, da es die klarste IMO ist.
Armand

42

Sie möchten wissen, ob b zuweisbar ist von a :

b.isAssignableFrom(a);

Wenn Sie wissen möchten, dass dies aeine direkte Unterklasse von b:

a.getSuperclass().equals(b);

Danke für die Antwort und danke für die Verwendung aund bvon der Frage
Armand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.