Jak sprawdzić, czy a
jest podklasą b
?Jak sprawdzić, czy jedna klasa java rozszerza inną w czasie wykonywania?
Class<?> a = A.class;
Class<?> b = B.class;
Jak sprawdzić, czy a
jest podklasą b
?Jak sprawdzić, czy jedna klasa java rozszerza inną w czasie wykonywania?
Class<?> a = A.class;
Class<?> b = B.class;
Szukasz:
Super.class.isAssignableFrom(Sub.class)
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ż.
Właściwie to B.class.isAssignableFrom (A.class), ponieważ chce wiedzieć, czy A jest podklasą B. – meriton
Ach tak, zmienię to. Zwykle przykłady są odwrotne (B przedłuża A). –
oszukać ciebie ;-p Wielkie dzięki za szczegółową odpowiedź; Akceptuję jednak meryton, ponieważ jest to najczystsze IMO. – Armand
Chcesz wiedzieć, czy b
is assignable froma
:
b.isAssignableFrom(a);
Dodatkowo, jeśli chcesz wiedzieć, że a
jest bezpośrednią podklasą b
:
a.getSuperclass().equals(b);
dzięki za odpowiedź i dzięki za używanie "a" i "b" z pytania – Armand
Dzięki za odpowiedź! – trusktr