Re:Tipos genéricos

3 respostas
filipenf

Funciona por questão de compatibilidade com código legado. Sempre que você usar collections não parametrizadas elas serão compatíveis com qualquer tipo. Isto pode gerar problemas como no exemplo que você deu, e também quando você recebe um objeto desses por parâmetro em um método. Tipo:

void teste(ArrayList<String> a) {
 ...
}

...
{
ArrayList a = new ArrayList();
teste(a);
}

3 Respostas

filipenf

O detalhe é que não teria como eles criarem generics sem ter isso. Caso contrário nenhum código escrito para a versão 1.4 poderia rodar na versão 1.5, isto seria um grande problema. Eles evitaram um problema grande, trazendo à tona outro menor. Isto porque basta o programador ser cuidadoso que ele conseguirá evitar a maior parte desses bugs.

Mas vale a discussão, e quando o generics foi introduzido à linguagem houve muita discussão nesse sentido, de que forma um recurso como esses poderia ser implementado, sem perder a compatibilidade e trazendo todos os recursos que trouxe. Dentro das possibilidades acho que eles implementaram da melhor forma.

A mesma discussão acontece quando se fala em adicionar sobrecarga de operadores em Java. Este recurso existe há anos no C++, e há anos se fala em adicionar isso ao java também. Apesar de facilitar muito por um lado para o programador pode causar muitas dores de cabeça também, principalmente para código legado. Na minha opinião este seria um recurso muito bem-vindo à linguagem.

Spool

É incrível como isso pode funcionar:

public Collection&lt;JFrame&gt; metodoQualquer() {
    ArrayList datas = new ArrayList();
    datas.add(new Date());
    return datas;
}

:lol:

Até!

Spool

Pois é.
Compatibilidade é fundamental, porém, em certas situações tem que ser muito bem estudada!

rsrs
Criei o tópico para, de certa maneira, demonstrar um pouco de “revolta” com uma implementação, muito parecida com a acima em um sistema!

Até!

Criado 18 de junho de 2009
Ultima resposta 18 de jun. de 2009
Respostas 3
Participantes 2