Як перевірити, чи один клас java продовжує інший під час виконання?


Відповіді:



84

Якщо ви хочете знати, Classрозширює чи інше розширення, використовуйте клас # isAssignableFrom (Class) . Для вашого прикладу це:

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

Якщо вас цікавить, чи є екземпляр певного типу, використовуйте instanceof:

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

Зауважте, що вони повернуться, trueякщо клас / екземпляр є членом ієрархії типів і не обмежують прямі співвідношення надкласу / підкласу. Наприклад:

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

Якщо ви хочете перевірити наявність прямих взаємозв'язків надкласових класів / підкласів, Тім також надав відповідь .


2
Власне, це B.class.isAssignableFrom (A.class), оскільки він хоче знати, чи A є підкласом B.
meriton

1
Ага так, я це зміню. Зазвичай приклади - навпаки (B, що поширюється на A).
Роб Грушка

хитрість я ;-p Велике спасибі за детальну відповідь; Я погоджуюсь із мірітоном, оскільки це найясніший ІМО.
Арман

42

Ви хочете дізнатися, чи b можна віднести a :

b.isAssignableFrom(a);

Крім того, якщо ви хочете знати, що aце прямий підклас b:

a.getSuperclass().equals(b);

дякую за відповідь, і дякую за використання aта bпитання
Арман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.