Genéricos sim, simples nem sempre

O recurso de tipos genéricos em Java permite soluções interessantes de economia de código ao definir classes e métodos de manipulação ou utilitários genéricos, mas que ao serem instanciados e usados podem ter um tipo específico definido. os tipos genéricos trazem a flexibilidade e generalidade da classe Object, porém com permitindo usos com verificação de tipo mais restrita, em tempo de compilação.

Em um artigo de 2004 em que eu falava das novidades que o Java 5 “Tiger” trazia, Prepare-se para o Tigre, havia um exemplo de uso básico de genéricos.

Existem casos complicados, em que a compreensão do funcionamento e uso dos tipos genéricos é mais difícil. No artigo Wildcard Generics (em inglês, por Marco, 17/11/2006), o autor ressalta um dos pontos menos intuitivo do recurso de tipos genéricos em Java, conforme indica o próprio Tutorial da Sun Generics in the Java Programming Language (PDF, em inglês, 5/07/2004), por Gilad Bracha:

“Em geral, se Foo é um subtipo (subclasse ou subinterface) de Bar, e G é alguma declaração de tipo genérico, não é correto afirmar que G<Foo> seja um subtipo de G<Bar>. Esta provavelmente é a coisa mais difícil que você deve aprender sobre genéricos, porque vai contra nossa mais profunda intuição.”

Outra situação que merece atenção é código que utiliza APIs mais antigas — sem genéricos — ou com tipos apagados (“erased”), com código compilado dentro da validação de sintaxe de Java 5 ou superior, com genéricos. Um exemplo de como evitar o aviso de compilação de verificação de tipo insegura sobre tipos apagados pode ser visto neste tópico do Fórum da Sun sobre Desenvolvimento Java: Checking against the erased type List.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *