Como testar se uma classe java estende outra em tempo de execução?


Respostas:


255

Você está procurando:

Super.class.isAssignableFrom(Sub.class)

84

Se você quiser saber se um Classestende outro, use Class # isAssignableFrom (Class) . Para o seu exemplo, seria:

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

Se você estiver interessado em saber se uma instância é ou não de um tipo específico, use instanceof:

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

Observe que eles retornarão truese a classe / instância for um membro da hierarquia de tipos e não for restritivo para direcionar os relacionamentos de superclasse / subclasse. Por exemplo:

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

Se você deseja verificar os relacionamentos diretos de superclasse / subclasse, Tim também forneceu uma resposta .


2
Na verdade, B.class.isAssignableFrom (A.class), já que ele quer saber se A é uma subclasse de B.
meriton

1
Ah sim, eu vou mudar isso. Normalmente, os exemplos são o contrário (B estendendo A).
Rob Hruska

enganado ya ;-p Muito obrigado pela resposta detalhada; Estou aceitando o Meriton, porém, como é o IMO mais claro.
Armand

42

Você quer saber se b é atribuível a partir de a :

b.isAssignableFrom(a);

Além disso, se você quiser saber que aé uma subclasse direta de b:

a.getSuperclass().equals(b);

Obrigado pela resposta, e obrigado por utilizar ae bda questão
Armand
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.