Boa tarde gente. Tenho uma dúvida sobre cast que envolve a ArrayList. Por favor, observem o código abaixo:
public class DadosClima implements Subject {
ArrayList observadores;
float temperatura, umidade, pressao;
public DadosClima()
{
observadores = new ArrayList();
}
public void registrarObservador(Observer o) {
observadores.add(o);
}
public void removerObservador(Observer o) {
int indice = observadores.indexOf(o);
if(indice >= 0) {
observadores.remove(indice);
}
}
public void notificarObservador() {
for(int i = 0; i < observadores.size(); i++)
{
// Por que é obrigatório fazer esse cast?
Observer observador = (Observer) observadores.get(i);
observador.atualizar(temperatura, umidade, pressao);
}
}
Gostaria de saber o porquê de eu ter que fazer o cast explícito neste caso se eu inseri objetos observadores dentro da ArrayList com o método registrarObservadores(). A conclusão que eu tirei foi a seguinte: ao inserir um objeto numa ArrayList, ele e´tratado como um objeto da classe Object não importando qual objeto foi adicionado a menos que você parametrize o ArrayList com o nome da Classe cujos objetos serão inseridos no ArrayList. Eu tentei isso; parametrizei o ArrayList (ArrayList observadores) e não precisei utilizar o cast. A afirmação em negrito está correta? Obrigado pelo esclarecimento.