g alt="imagem_pdf.jpg" src="/imagens/imagem_pdf.jpg" border="0" width="34" height="34">

Genéricos no J2SE 5.0

As novidades da linguagem em tipos genéricos etc.

  De todas as novidades que já cobrimos do J2SE 5.0 (“Tiger”), o recurso de tipos genéricos é, sem dúvida, o mais significativo – em várias medidas. É o mais esperado (há anos em gestação) e o de maior impacto na linguagem. E é talvez o item que nos tomará mais tempo para assimilar completamente. Estamos acostumados com uma linguagem quase “congelada” desde 1995 e, enquanto vários outros recursos sintáticos do Tiger (como o for estendido ou o static import) são extremamente simples e não tomarão mais de alguns minutos de aprendizado, os tipos genéricos requerem uma atenção séria.

  Tipos genéricos já foram apresentados no artigo “Generics no Java 1.5” (na Edição 3, quando o recurso ainda estava em fase bastante preliminar) e mencionados em outros artigos meus sobre o Tiger. Tutoriais e introduções já estão se tornando comuns, mas a simplicidade aparente do recurso – até a especificação formal da JSR-14 (“Add[ing] Generic Types to the Java Programming Language”) é surpreendentemente legível – pode ser enganosa.

  Não que os tipos genéricos sejam tão difíceis; é que não se trata apenas de um novo conjunto de sintaxes e funcionalidades, mas sim de uma extensão do paradigma de programação orientada a objetos de Java. Dessa forma, a dificuldade de aprendizado é mais uma questão de se habituar a novos conceitos até que estes se tornem “intuitivos”. Neste artigo, tentarei explorar as características e conseqüências mais marcantes do novo paradigma.

Objetivos e Alô Mundo

  Para recapitular um pouco da teoria de linguagens de programação, consulte o quadro “Tipos e Sistemas de Tipos”, que define conceitos relevantes para este artigo. Partindo daí, começamos justificando a necessidade dos tipos genéricos.

Observe o trecho de código a seguir:

Map prodMap = new HashMap();
List frutas = new ArrayList();

frutas.add(new Produto(“Banana”));
prodMap.put(“Frutaria”, frutas);
Produto banana = (Produto)((List)prodMap.get(“Frutaria”)).get(0);
prodMap.put(new Integer(0), “Erro”); // Ok!

  Este código manipula uma estrutura de dados que indexa listas de produtos pelo nome do fornecedor. A versão com tipos genéricos ficaria assim:

Quer ler esse conteúdo completo? Tenha acesso completo