Achar classe pelo seu atributo

Boa tarde pessoal,

Entao estou com um “probleminha” que nao to vendo uma soluçao, eu preciso achar um objeto filtrando se ele tem um dado atributo.

Por exemplo algo do tipo :

boolean result = ObjetoVerificaSeTemAtributo(DadoNomeDaClasse, nomeDoAtributo);

Alguem conhece algum Utils da vida que faça isso ??? nao quero fazer milhares de ifs pra resolver isso :stuck_out_tongue:

Abraços

[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();

     }   
     resultado.add(atributo);   
  }   
  return resultado;   

}
[/code]>

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  
    */  
   public static List listarAtributos(Class classe){   
      ArrayList resultado = new ArrayList();   
      Field[] campos = classe.getDeclaredFields();   
      for (int i = 0; i&lt;campos.length; i++){   
         Atributo atributo = new Atributo();     
         atributo.setNome(campos[i].getName());   
         atributo.setTipo(campos[i].getType());   
         resultado.add(atributo);   
      }   
      return resultado;   

agora e´só criar o seu método

ObjetoVerificaSeTemAtributo(DadoNomeDaClasse, nomeDoAtributo);
>

Falow cara eu estava dando uma lida em relection mesmo, mas agora ganho tempo …

vluuuu mesmo !!!

Além dos atributos,gostaria de pegar também os métodos(toda a assinatura do método).Existe uma forma de se fazer isso?

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html
Olhe os métodos getMethods e getDeclaredMethods
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/package-summary.html
Olhe a classe “Method”

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 :slight_smile:

Resolvido.Obrigado