Como iterar um arraylist de instâncias em um foreach?

4 respostas
J

Olá pessoal, tenho o seguinte trecho:

ArrayList<Object> peersArray = new ArrayList<Object>(Arrays.asList(this.pd01, this.pd02, this.pd03, 
				this.pd04, this.pd05, this.pd06, this.pd07, this.pd08, this.pd09, this.pd10, this.pd11,
				this.pd12, this.pd14, this.pd15, this.pd16, this.pd17, this.pd18, this.pd19, this.pd20));
		
		for(Object peer : peersArray){
			if(peer.address == address ){
				
			}
		}

peersArray é um array de instâncias de classes diferentes, todas essas classes possuem uma variável pública chamada address. Porém quando faço 'if(peer.address == address )' acontece o erro: [color=red]'address cannot be resolved or it is not a field'[/color]. Como contornar isso? Estou fazendo do jeito certo?

Abração e agradeço desde já,

4 Respostas

A

O problema é que não tem como saber que seus objetos tem essa variável address, pois você definiu o tipo como objeto.

São todas essas variáveis do mesmo tipo? Se sim, utilize o tipo concreto ao invés de Object na sua declaração.

Se forem de tipos diferentes, tente fazer todos implementarem uma mesma interface com um método getAddress(), por exemplo, e declare o ArrayList como essa interface.

Algumas sugestões extras:

  • Procure declarar o tipo mais genérico possível para suas variáveis: Collection&lt;AlgumaCoisa&gt; per = new ArrayList&lt;AlgumaCoisa&gt;();
  • Não chame uma variável de Array (principalmente quando ela não for um).
  • Dê nomes claros para suas variáveis (não pd1, pd2, etc…)
J

São de tipos diferentes, tô procurando aqui como implementar interfaces.

Não entendi a parte do ‘declare o ArrayList como essa interface.’

Valeu!

D

O que o abel bueno falou está certo, mas se você precisa manter ArrayList por algum motivo então é possível fazer downcast

exemplo de downcast:

Object obj = new AlgumaCoisa();

if ( obj instanceof AlgumaCoisa )

{

AlgumaCoisa ac = ( AlgumaCoisa ) obj;
//Agora é possível acessar todos os membros do objeto!

}

rafael_jesus

Da pra fazer com Reflection, posta teu código todo aee que eu tento fazer aqui…

Criado 11 de janeiro de 2013
Ultima resposta 12 de jan. de 2013
Respostas 4
Participantes 4