Jak sprawdzić, czy a
jest to podklasa b
?
Class<?> a = A.class;
Class<?> b = B.class;
Odpowiedzi:
Jeśli chcesz wiedzieć, czy a Class
rozszerza inny, użyj Class # isAssignableFrom (Class) . Na przykład byłoby to:
if(B.class.isAssignableFrom(A.class)) { ... }
Jeśli interesuje Cię, czy instancja jest określonego typu, użyj instanceof
:
A obj = new A();
if(obj instanceof B) { ... }
Zwróć uwagę, że zwrócą one wartość, true
jeśli klasa / instancja jest członkiem hierarchii typów i nie ograniczają 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ć bezpośrednie relacje nadklasy / podklasy, Tim również udzielił odpowiedzi .
Chcesz wiedzieć, czy b
można go przypisać z a
:
b.isAssignableFrom(a);
Dodatkowo, jeśli chcesz wiedzieć, że a
jest to bezpośrednia podklasa b
:
a.getSuperclass().equals(b);
a
i b
z pytania