Recuperar uma Classe e seu atributos em Runtime

Estou querendo fazer a seguinte tarefa:

  • Atribuir em uma classe List objeto(Esta parte ok).
List l = new ArrayList();
Cadastro c;
	
c = new Cadastro("RODIRGO",24);
l.add(c);
  • Agora quero resgatar esta clase do ArrayList e exibir as propriedades.
    já tentei de várias formas mas a só consegui chegar até aki:
Iterator t = l.iterator();

while (t.hasNext()) {
  try {
    System.out.println(t.next().getClass().getDeclaredField("nome"));  
  }
  catch (Exception e) {}
}

:?: Estou indo no caminho certo, ou tá tudo errado?
Valeu galera, um abraço.


Segue abaixo a declação da classe:

public class Cadastro {
	 private String nome;
	 private int idade;
	 
	 public Cadastro(String nome, int idade) {
	 	this.nome = nome;
	 	this.idade = idade;		 	
	 }
	 
	 public String getNome() {
	 	return this.nome; 
	 }
		 
	 public int getIdade() {
	 	return this.idade;
	 }
}

Olhe o pacote java.beans - diversão garantida pra família toda! :smiley:

Um exemplo particularmente interessante:

Cadastro c = new Cadastro("Carlos", 20); BeanInfo info = Introspector.getBeanInfo(c.getClass()); PropertyDescriptor[] descriptors = info.getPropertyDescriptors(); for(int i=0; i<descriptors.length;i++) { PropertyDescriptor p = descriptors[i]; Method reader = p.getReader(); Method writer = p.getWriter(); String name = p.getDeclaredName(); }

Matou? :wink: :smiley:

Não sei se entendi bem a pergunta, mas, não rolava de fazer um cast do que vc recupera da lista para o tipo que vc quer? Assim, o seu trecho de codigo ficaria:

[code]Iterator t = l.iterator();

while (t.hasNext()) {
try {
Cadastro c = (Cadastro)t.next();
System.out.println(“Nome:” + c.getNome());
System.out.println(“Idade:” + c.getIdade());
}
catch (Exception e) {
e.printStackTrace();
}
} [/code]

Vc poderia melhorar com um if que verificasse se o next do iterator é mesmo uma instaceof da classe para a qual vc está fazendo o cast.

Até.

Com o cast funcionaria perfeitamente, mas o que eu estou querendo fazer é um iterator genérico.
Que funcione para qualquer tipo de objeto.

Se eu utilizar o cast terei que ter um metodo específico para cada objeto.