Instanceof em Reflection [RESOLVIDO]

to com o seguinte problema…

de posse de uma classe quero retornar todas as classes filhas dela.

tenho um metodo que me retorna todos as Classes do meu claspth, pensei em fazer um instanceof em todas elas armazenando assim as classes filhas…

mais com o método isInstance da classe Class não consigo fazer um unstanceof válido:


//se faço 
Class cls = Class.forName("java.lang.String");

boolean b1 = cls.isInstance(new Integer(37));
System.out.println(b1);

boolean b2 = cls.isInstance(new java.lang.String("teste"));
System.out.println(b2); 

me imprime false e true

mais se tenho um objeto que herda o outro não consigo


//a classe Pessoa herda da classe Usuario
Class pessoa = Class.forName("br.com.teste.Pessoa");
		
boolean b1 = cls.isInstance(new Usuario());
System.out.println(b1);
		
boolean b2 = cls.isInstance(new java.lang.String("gfhfghdf"));
System.out.println(b2); 
		

ai me imprime false false

se puderem me ajudar a achar todos os filhos de uma classe ou fazer um instanceof em um objeto do tipo Class agradeço…

Use o método isAssignableFrom de Class.

por que o teste dos metodos isInstance e o isAssignableFrom a verificação é ao contrário;

exemplo:


//a classe Pessoa herda da classe Usuario   
Class pessoa = Class.forName("br.com.teste.Pessoa");   
	           
boolean b2 = pessoa.isAssignableFrom(Usuario.class);
System.out.println(b2); 

na tradução do método: Pessoa é atribuível a partir de Usuário, deveria ser true…

mais se fizer ao contrário


//a classe Pessoa herda da classe Usuario   
Class user = Class.forName("br.com.teste.Usuario");   
	           
boolean b2 = user.isAssignableFrom(Pessoa.class);
System.out.println(b2); 

ele imprime verdadeiro, e isso ocorre também no método isInstace.

Por que??

e porque esse código me retorna false:


Class user= Class.forName("br.com.teste.Usuario");   

boolean b1 = cls.isInstance(new Pessoa());   
System.out.println(b1);   

se Pessoa é uma instância de usuário

e o contrário também


Class pessoa= Class.forName("br.com.teste.Pessoa");   

boolean b1 = cls.isInstance(new Usuario());   
System.out.println(b1);   

Leia a documentação que ela explica os porquês!

Mas, basicamente:

public class Pessoa {}
public class Empregado extends Pessoa {}
boolean b = Pessoa.class.isAssignableFrom(Empregado.class); // true