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.
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>.
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.
Top comments (0)