/** * Lista todos os atributos existente no objeto que foi passada como parametro. * * @param classe Classe * @return Lista de todos os atributos */publicstaticListlistarAtributosValores(Objectobjeto){ArrayListresultado=newArrayList();Classclasse=objeto.getClass();Field[]campos=classe.getDeclaredFields();for(inti=0;i<campos.length;i++){AtributoValoratributo=newAtributoValor();atributo.setNome(campos[i].getName());atributo.setTipo(campos[i].getType());try{atributo.setValor(campos[i].get(objeto));}catch(Exceptione){System.out.println("Erro!!!!");e.printStackTrace();}resultado.add(atributo);}returnresultado;}
>
Focao
faltou um pedaço…
/** * Lista todos os atributos existente na classe que foi passada como parametro. * * @param classe Classe * @return Lista de todos os atributos */publicstaticListlistarAtributos(Classclasse){ArrayListresultado=newArrayList();Field[]campos=classe.getDeclaredFields();for(inti=0;i<campos.length;i++){Atributoatributo=newAtributo();atributo.setNome(campos[i].getName());atributo.setTipo(campos[i].getType());resultado.add(atributo);}returnresultado;
Essa sua questão me lembrou de uma coisa bacana em Scala, você pode dar um tipo a um método, que é referente ao método da classe, por exemplo:
“Só quero que esse método receba objetos que possuam um método print que retorne uma String”
E não precisa haver nenhum relacionamento hierárquico entre os parâmetros que o método recebe, apenas precisa ter esse método (E essa validação é feita em tempo de compilação).
Traduzindo pra código fica mais ou menos assim:def fechando[objeto <: {def print: String}]{
objeto.print
}Agora relativo à sua dúvida mais específica, a sugestão do entanglement foi muito boa. Eu sempre recomendo a Mirror DSL para quem quer mexer com reflection, pois abstrai bastante complexidade e torna o trabalho muito mais fácil.
Mas se você só vai usar reflection pra fazer isso, não seria justificável uma dependência a mais, faça na mão mesmo