2010-08-17 13 views

Antwort

206

Suchen Sie:

Super.class.isAssignableFrom(Sub.class) 
+0

Danke für die Antwort! – trusktr

73

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.

+2

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

+1

ist. Ah ja, ich werde das ändern. In der Regel sind die Beispiele umgekehrt (B erweitert A). –

+0

ausgetrickst ya ;-p Vielen Dank für die ausführliche Antwort; Ich akzeptiere meritons, da es die klarste IMO ist. – Armand

34

Sie wollen, wenn bis assignable froma wissen:

b.isAssignableFrom(a); 

Außerdem, wenn Sie wissen wollen, dass a eine direkte Unterklasse von b ist:

a.getSuperclass().equals(b); 
+0

danke für die Antwort und danke für die Verwendung von 'a' und' b' aus der Frage – Armand

Verwandte Themen