Recuperar uma Classe e seu atributos em Runtime

3 respostas
black_fire

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;
	 }
}

3 Respostas

cv1

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:

cancao
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:
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();
  } 
}

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é.

black_fire

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.

Criado 29 de setembro de 2003
Ultima resposta 30 de set. de 2003
Respostas 3
Participantes 3