[code]
/**
* Lista todos os atributos existente no objeto que foi passada como parametro.
*
* @param classe Classe
* @return Lista de todos os atributos
*/
public static List listarAtributosValores(Object objeto){
ArrayList resultado = new ArrayList();
Class classe = objeto.getClass();
Field[] campos = classe.getDeclaredFields();
for (int i = 0; i<campos.length; i++){
AtributoValor atributo = new AtributoValor();
atributo.setNome(campos[i].getName());
atributo.setTipo(campos[i].getType());
try{
atributo.setValor(campos[i].get(objeto));
}catch(Exception e){
System.out.println(“Erro!!!”);
e.printStackTrace();
/**
* Lista todos os atributos existente na classe que foi passada como parametro.
*
* @param classe Classe
* @return Lista de todos os atributos
*/
public static List listarAtributos(Class classe){
ArrayList resultado = new ArrayList();
Field[] campos = classe.getDeclaredFields();
for (int i = 0; i<campos.length; i++){
Atributo atributo = new Atributo();
atributo.setNome(campos[i].getName());
atributo.setTipo(campos[i].getType());
resultado.add(atributo);
}
return resultado;
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