DEV Community

Giselecoder
Giselecoder

Posted on

Priorize métodos genéricos

Item 30: Priorize os métodos genéricos (Java Efetivo)

O artigo discute a importância de priorizar métodos genéricos na programação Java. Assim como as classes podem ser genéricas, os métodos também podem. Métodos utilitários estáticos que operam em tipos parametrizados são normalmente genéricos. Todos os métodos "algorítmicos" nas Collections, como binarySearch e sort, são exemplos disso.

Escrever métodos genéricos é semelhante a escrever tipos genéricos. Um exemplo de método defeituoso é apresentado, que retorna a união de conjuntos. Embora esse método compile, ele emite duas advertências. Para corrigir essas advertências e tornar o método "type-safe", é necessário modificar a declaração do método para usar um parâmetro de tipo que represente o tipo de elemento para os conjuntos, e usar esse parâmetro de tipo em todo o método.

Após a modificação, o método compila sem advertências, fornece segurança de tipo e é fácil de usar. Um exemplo de programa simples é fornecido para demonstrar o uso desse método.

O artigo também discute sobre a criação de objetos imutáveis aplicáveis em muitos tipos diferentes. Como os genéricos são implementados pelo processo de "erasure", um único objeto pode ser utilizado para todos os tipos parametrizados necessários. Esse padrão, conhecido como "fabricação de singleton genérico", é exemplificado com objetos de função e em coleções.

Uma limitação do método union é discutida, e é sugerido o uso de tipos wildcard limitados para torná-lo mais flexível. Um exemplo de distribuidor de função identidade é apresentado para ilustrar o uso de singleton genérico.

O artigo também aborda o conceito de "limite de tipo recursivo", que é comumente usado com a interface Comparable. Exemplos são fornecidos para ilustrar como expressar essa restrição em métodos.

Em resumo, os métodos genéricos são mais seguros e fáceis de usar do que métodos que exigem casts explícitos. Priorizar métodos genéricos facilita a vida dos usuários e não quebra clientes existentes.

Top comments (0)