2010-08-17 11 views

Odpowiedz

206

Szukasz:

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

Dzięki za odpowiedź! – trusktr

73

Jeśli chcesz wiedzieć, czy dana Class rozciąga się inny, użyj Class#isAssignableFrom(Class). Na swoim przykładzie, byłoby:

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

Jeśli jesteś zainteresowany, czy instancja jest od konkretnego typu, należy instanceof:

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

pamiętać, że będą one powrócić true jeśli klasa/instance jest członkiem hierarchii typów i nie ogranicza się do bezpośrednich relacji nadklasy/podklasy. Na przykład:

// 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 

Jeśli chcesz sprawdzić na bezpośrednich relacjach nadklasą/podklasie Tim has provided an answer również.

+2

Właściwie to B.class.isAssignableFrom (A.class), ponieważ chce wiedzieć, czy A jest podklasą B. – meriton

+1

Ach tak, zmienię to. Zwykle przykłady są odwrotne (B przedłuża A). –

+0

oszukać ciebie ;-p Wielkie dzięki za szczegółową odpowiedź; Akceptuję jednak meryton, ponieważ jest to najczystsze IMO. – Armand

34

Chcesz wiedzieć, czy bis assignable froma:

b.isAssignableFrom(a); 

Dodatkowo, jeśli chcesz wiedzieć, że a jest bezpośrednią podklasą b:

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

dzięki za odpowiedź i dzięki za używanie "a" i "b" z pytania – Armand

Powiązane problemy