[Resolvido] Como utilizar reflexão para obter a classe que está implementado a interface?
8 respostas
V
v1c70r_f
Olá galera!!!
Meu problema é o seguinte, a partir de um objeto com o getClass dá pra saber qual é a classe, o problema é que quando for uma interface preciso dar um getClass na classe que está implementando ela para pegar os atributos privados que não estão declarados nessa interface.
Ou seja, caso tenha uma interface, quero varrer os atributos da classe que a implementa.
Acho que dá pra fazer devido em modo debug o eclipse e o netbeans conseguir identificar qual é a classe da implementação e permitir varrer todo o objeto.
Se não me engano daria pra fazer isso utilizando um getClass().asSubclass(), ou getClass.cast(), porém desconheço a classe de implementação.
Deixa eu ver se entendi: você tem uma interface e várias classes que usam implements nela. Você quer, a partir dessa interface, buscar todas essas classes que são subclasses dessa interface?
V
v1c70r_f
Não carinha…
tenho um objeto instanciado
quando dou um getClass() é retornada uma interface, mas preciso pegar a classe da implementação.
importjava.lang.reflect.Field;importcom.teste.reflection.Classe;importcom.teste.reflection.ClasseFactory;publicclassTesteReflection{publicstaticvoidmain(String[]args){Classehay=ClasseFactory.createClasse();System.out.println(hay.getClass());// utilizando o for que você passou eu consigo encontrar a propriedadefor(Fieldfield:hay.getClass().getDeclaredFields()){System.out.println(field);if(field.getName().equals("propriedadeImplementacao")){System.out.println("Encontrei o field");}}// mas tentava pegar uma propriedade pelo nome, aí acontecia o errotry{System.out.println(hay.getClass().getField("PROPRIEDADE_INTERFACE"));System.out.println(hay.getClass().getField("propriedadeImplementacao"));// aqui acontece o erro}catch(SecurityExceptione){e.printStackTrace();}catch(NoSuchFieldExceptione){e.printStackTrace();}}}
saída no console:
Obrigado carinha!!!
Abraçooooo
A
Andre_Brito
Tranquilo. Se não for pedir muito, coloca as tags de resolvido no título do tópico.
V
v1c70r_f
Opa,
feito André!!
vlwwww abraçooo
G
gregoryfontenele
Resgatando o tópico…
Quando dou um service.getClass() o que é impresso no console é
Mas no debug do eclipse quando vou na variável aparece o nome da classe…
Como resolvo isso?
Obrigado
V
v1c70r_f
Olá Gregory,
Quando você visualiza pelo debug do eclipse, você visualiza o getClass() ou apenas o valor da variável?
Porque o trecho “br.com.teste.ServiceImpl@109bf4d” parece corresponder a um valor retornado por um método toString(), que é o utilizado pelo debug para apresentar o valor de uma variável.
Se puder, coloque o trecho do seu código _o/. Como a saída foi “$Proxy83”, você está utilizando algum framework? A classe que você deu um getClass() é uma entidade ORM ou algum tipo de serviço?