DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on • Edited on

Priorize os tipos genéricos

Item 29: Priorize os tipos genéricos (Java Efetivo)

É importante priorizar o uso de tipos genéricos em projetos Java.
A implementação genérica de uma pilha é discutida aqui, ressaltando a necessidade de parametrização para melhorar a segurança e a legibilidade do código.

Ao transformar uma classe não genérica em genérica, é necessário substituir todos os usos do tipo Object pelo parâmetro de tipo apropriado.

A criação de um array de um tipo genérico pode causar problemas de compilação devido à falta de reificação do tipo. São apresentadas duas maneiras de resolver esse problema: a primeira envolve a criação de um array de Object e a supressão da advertência, enquanto a segunda envolve a alteração do tipo do array para Object[].

São discutidos os prós e contras de cada técnica de eliminação do erro de criação de array genérico.

Em contras:
Alguns exemplos de problemas são apresentados nos exemplos do livro, a seguir:

Exemplo de pilha normal
Image description

Com Generics
Image description

Alguns error e problemas que podem ocorrer são abordados a seguir:

Image description

Image description

Image description

Image description

Image description

Outro exemplo de uso da classe genérica Stack é fornecido para ilustrar a eliminação da necessidade de cast explícito.
Embora seja recomendado preferir listas sobre arrays, algumas situações exigem o uso de arrays em tipos genéricos.

Image description

Limitações dos tipos genéricos do Java são discutidas, como a impossibilidade de criar uma pilha de tipos primitivos.
Tipos genéricos com parâmetros de tipo limitado são introduzidos, exemplificados pela classe DelayQueue.

Conclui-se que tipos genéricos tornam o código mais seguro e legível, especialmente ao evitar a necessidade de casts explícitos no código cliente. Recomenda-se que tipos existentes sejam transformados em genéricos sempre que possível para melhorar a experiência do usuário sem quebrar a compatibilidade com clientes existentes.

Top comments (0)