DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

1

Item 38: Emule enums extensíveis por meio de interfaces

Enums em Java:

  • Enums são preferíveis aos padrões enum typesafe (descritos na primeira edição do livro).
  • A exceção é a extensibilidade, que era possível no padrão original, mas não é suportada pelas enums em Java.

Extensibilidade de Enums:

  • Extensibilidade de enums geralmente é uma má ideia:
  • Confusão entre elementos de tipos estendidos e tipos base.
  • Dificuldade em enumerar todos os elementos de tipos base e suas extensões.
  • Complica o design e implementação.

Uso de Enums Extensíveis:

  • Útil em casos como códigos de operação (opcodes).
  • Permite que usuários da API forneçam suas próprias operações.

Solução com Interfaces:

  • Enums podem implementar interfaces arbitrárias.
  • Defina uma interface para o tipo de opcode e um enum que implemente essa interface.

Exemplo:

  • Operation (interface) e BasicOperation (enum) do Item 34.
  • Criação de um enum que implemente a interface Operation.

Image description

Image description

Uso na API:

  • Utilize o tipo da interface (Operation) nas APIs.
  • Pode definir e usar enums estendidos que implementem a interface.

Implementação:

  • Passar o literal de classe (ExtendedOperation.class) ou uma Collection<? extends Operation>.

Image description

Limitações e Soluções:

  • Implementações não podem ser herdadas de um tipo enum para outro.
  • Pode duplicar código ou usar métodos auxiliares estáticos para evitar duplicação.

Exemplo na Biblioteca Java:

  • Tipo enum java.nio.file.LinkOption implementa as interfaces CopyOption e OpenOption.

Resumo:

  • Emule enums extensíveis escrevendo uma interface para acompanhar um tipo enum base que implemente a interface.
  • Clientes podem escrever seus próprios enums ou tipos que implementem a interface.
  • Instâncias desses tipos podem ser usadas onde as instâncias do tipo enum base são usadas, desde que as APIs sejam escritas em termos da interface.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

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

Okay