DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on • Edited on

Item 33: Pense na possibilidade de usar contêineres heterogêneos typesafe

Usos Comuns dos Genéricos

  • Coleções como Set e Map.
  • Contêineres de elemento único como ThreadLocal< T > e AtomicReference< T >.
  • Limitação: fixar número de parâmetros de tipo por contêiner.

Necessidade de Flexibilidade

  • Exemplo: linha de banco de dados com muitas colunas.
  • Solução: parametrizar a chave em vez do contêiner.

Exemplo de Implementação: Classe Favorites
Permite armazenar e recuperar instâncias favoritas de muitos tipos.
Utiliza objetos da classe Class como chave.
Class permite comunicação de informações em tempo de compilação e execução.

API da Classe Favorites

  • Cliente apresenta um objeto Class para configurar e recuperar favoritos.
  • Exemplo de uso: Image description

Implementação da Classe Favorites

  • Utiliza Map < Class<?>, Object> para armazenar favoritos.
  • putFavorite insere o objeto favorito no mapa.
  • getFavorite recupera e faz cast dinâmico para o tipo correto usando Class.cast.

Limitações da Classe Favorites

  • Segurança de tipos pode ser corrompida por clientes maliciosos usando Class bruto.
  • Não pode ser usada com tipos não reificados (ex: List).
  • putFavorite pode verificar instâncias para assegurar segurança: Image description

Wrappers de Coleção Typesafe

  • java.util.Collections oferece wrappers como checkedSet, checkedList, checkedMap.
  • Adicionam reificação às coleções, lançando ClassCastException em inserções incorretas.

Tokens de Tipo Limitados

  • Exemplo: método getAnnotation na interface AnnotatedElement.
  • Utiliza Class<? extends Annotation> como token de tipo limitado.
  • Class.asSubclass realiza cast seguro dinamicamente.

Resumo Final

  • Contêineres genéricos normalmente têm número fixo de parâmetros de tipo.
  • Contêineres heterogêneos typesafe usam parâmetros de tipo nas chaves.
  • Objetos Class podem ser usados como tokens de tipo.
  • Tokens de tipo personalizados também podem ser usados, como DatabaseRow e Column.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay