Esse artigo faz parte da revista Java Magazine edição 04. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler essa revista em PDF.imagem_pdf.jpg

Generics no Java 1.5

Tipos genéricos no projeto Tiger

A introdução de generics no Java 1.5 tem o potencial de reduzir o número de erros e aumentar o reaproveitamento de código em suas aplicações

A tecnologia Java incorpora muitas novidades a cada nova versão: servlets, JSP, EJBs, web services... O conjunto de APIs fica cada vez maior e mais completo. Mas além das bibliotecas e da plataforma, a linguagem Java também sofre mudanças. Isso já aconteceu com a entrada das classes internas (inner classes) no Java 1.1, e as assertions no J2SE 1.4.

Também haverá mudanças na versão 1.5 (codinome Tiger), com lançamento marcado para outubro de 2003. Uma das grandes novidades são os generics. Neste artigo, vamos ver como generics facilitará a programação em Java, com uma abordagem prática.

Programação genérica

Os programadores de C++ logo reconhecerão a semelhança do generics com a STL (Standard Template Library). Esta biblioteca veio para trazer containers ao C++, muito semelhante a API de Collections do Java. Mas não foi só isso: a STL trouxe também os tipos parametrizados.

Generics traz para o Java o conceito de programação com tipos parametrizados. Com o novo recurso, você pode optar por não definir que classe você está tratando ou retornando em determinado método, especificando isso somente na hora de construir uma instância da classe. Você passa um tipo como um parâmetro. Daí o nome “parametrizado”.

Pode parecer complicado, mas imagine que você precise de uma lista de strings. Normalmente, você cria um ArrayList e faz o cast de Object para String no momento de obter o objeto da lista. Isto é uma prática muito comum, mas você nem sempre pode garantir que dentro desse ArrayList encontram-se apenas Strings, tornando o seu cast suscetível ao lançamento ­da mais que comum ClassCastException. A Listagem 1 ilustra esse simples uso.

O conceito de generics vem para evitar este tipo de cast, fazendo com que a checagem dos tipos seja feita em tempo de compilação em vez de execução. Na JSR-14, onde generics para Java é definido, os autores deixam bem claro o seu benefício: adicionar expressividade e segurança ao código, fazendo a escolha do tipo dos parâmetros explícitos (em vez de sempre usar Object) e tornando os casts implícitos.

Vejamos um exemplo prático. Imagine que queremos definir uma ArrayList, só que gostaríamos de deixar explícito que trabalhamos com strings. A Listagem 2 mostra como é simples criar uma ArrayList com essa característica usando generics. Note que, para depois recuperar alguma das strings, não é necessário cast algum. Se você, por exemplo, tentar guardar o retorno do get(0) em um Object, receberá um erro de compilação.

Diminuindo os casts, a programação genérica diminui as checagens de tipo em tempo de execução, passando-as para tempo de compilação. Se, por exemplo, você chamasse o ...

Quer ler esse conteúdo completo? Tenha acesso completo