Jak sprawdzić, czy jedna klasa java rozszerza inną w czasie wykonywania?

Jak sprawdzić, czy a jest podklasą b?

Class<?> a = A.class;
Class<?> b = B.class;
Author: Armand, 2010-08-17

3 answers

Szukasz:

Super.class.isAssignableFrom(Sub.class)
 219
Author: meriton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-17 16:48:41

Jeśli chcesz wiedzieć, czy Class rozszerza inny, użyj klasy#isAssignableFrom(Class). Dla Twojego przykładu byłoby to:

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

Jeśli interesuje Cię, czy dana instancja jest konkretnego typu, użyj instanceof:

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

Zauważ, że zwrócą one true, jeśli Klasa / instancja jest członkiem hierarchii typów i nie są ograniczone do bezpośrednich relacji klasy nadrzędnej/podrzędnej. 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 klasy superklasowej /podklasowej, Tim również udzielił odpowiedzi .

 79
Author: Rob Hruska,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:22

Chcesz wiedzieć, czy b można przypisać od a:

b.isAssignableFrom(a);

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

a.getSuperclass().equals(b);
 39
Author: Tim Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-17 16:50:03