Dúvida em cast[RESOLVIDO]

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.

Exato.

O código inicial é o mesmo que se você fizesse assim:

ArrayList<?> observadores;

Você não define o tipo de Objeto que será inserido no ArrayList e quando deseja extrair um valor do ArrayList<?> conseqüentemente você necessita efetuar o Cast.
Abraços.

[quote=nel]Exato.

O código inicial é o mesmo que se você fizesse assim:

ArrayList<?> observadores;

Você não define o tipo de Objeto que será inserido no ArrayList e quando deseja extrair um valor do ArrayList<?> conseqüentemente você necessita efetuar o Cast.
Abraços.[/quote]

Obrigado nel.