Olá pessoal, tenho o seguinte trecho:
[code]
ArrayList peersArray = new ArrayList(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 ){
}
}[/code]
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á,
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<AlgumaCoisa> per = new ArrayList<AlgumaCoisa>();
- 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…)
São de tipos diferentes, tô procurando aqui como implementar interfaces.
Não entendi a parte do ‘declare o ArrayList como essa interface.’
Valeu!
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!
}
Da pra fazer com Reflection, posta teu código todo aee que eu tento fazer aqui…