Pessoal, tenho uma ArrayList que tem vários objetos que implementam uma mesma interface ou estendem uma mesma superclasse. Na hora de utilizar um ou mais objetos deste ArrayList em outra classe, eu uso o método:
public SuperClasse getObjeto(int index){
return lista.get(index);
}
O problema é que sempre, nas chamadas do método, eu tenho que ficar utilizando cast se eu precisar do objeto de um tipo específico (das subclasses):
//Se eu precisar de um objeto SubClasseUm:
SubClasseUm objetoUm = (SubClasseUm) etc.getObjeto(0);
//Se eu precisar de um objeto SubClasseDois:
SubClasseDois objetoDois = (SubClasseDois) etc.getObjeto(1);
Tem alguma outra forma de driblar esses casts, ou tem que ser assim mesmo?
[quote=silasyudi]Pessoal, tenho uma ArrayList que tem vários objetos que implementam uma mesma interface ou estendem uma mesma superclasse. Na hora de utilizar um ou mais objetos deste ArrayList em outra classe, eu uso o método:
public SuperClasse getObjeto(int index){
return lista.get(index);
}
O problema é que sempre, nas chamadas do método, eu tenho que ficar utilizando cast se eu precisar do objeto de um tipo específico (das subclasses):
//Se eu precisar de um objeto SubClasseUm:
SubClasseUm objetoUm = (SubClasseUm) etc.getObjeto(0);
//Se eu precisar de um objeto SubClasseDois:
SubClasseDois objetoDois = (SubClasseDois) etc.getObjeto(1);
Tem alguma outra forma de driblar esses casts, ou tem que ser assim mesmo?[/quote]
Sinceramente, não vejo como poderia ser mais fácil. Eu acho que de alguma maneira, você deve ter se enroscado em algum ponto no seu projeto. Qual seria a sua motivação para usar as subclasses ao invés da superclasse?
Dependendo muito do problema que se está tentando resolver é possível utilizar um método genérico para evitar cast’s.
Outra alternativa seria criar outros métodos “get” que retornassem os tipos mais específicos, o que na verdade significa jogar o cast para dentro desses métodos.
Porém, todavia, contudo, entretanto está parecendo que talvez o problema seja conceitual e não de design ou de linguagem.
Mais detalhes sobre o que realmente você está tentando fazer podem ajudar a solucionar a questão.