DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Item 36: Use a classe EnumSet em vez dos campos de bits

1. Uso Tradicional de Campos de Bits:

  • Enumeração com Potências de 2:
    Cada constante enum é atribuída a uma potência de 2.
    Combinação de Constantes: Utiliza-se a operação bitwise OR para combinar constantes.

  • Operações de Conjunto:
    União e interseção são feitas eficientemente com aritmética bitwise.

2. Desvantagens dos Campos de Bits:

  • Interpretação Difícil:
    Campos de bits são mais difíceis de interpretar do que constantes enum int.

  • Iteração Complexa:
    Não há um modo fácil de iterar sobre os elementos de um campo de bits.

  • Limitação de Tamanho:
    Precisa-se prever o número máximo de bits necessários ao criar a API, limitando a 32 (int) ou 64 bits (long).

3. Alternativa Melhor - EnumSet:

  • Representação Eficiente:
    java.util.EnumSet representa conjuntos de valores retirados de um único tipo enum.

  • Interface Set:
    EnumSet implementa a interface Set, oferecendo segurança de tipo e interoperabilidade.

  • Desempenho Comparável:
    Para enums com até 64 elementos, EnumSet é representada com um único long.

  • Operações de Conjunto:
    Métodos como removeAll e retainAll usam aritmética bitwise internamente.

4. Exemplo de Uso:

Image description

5. Vantagens do EnumSet:

Clareza e Concisão: Código é mais claro e conciso em comparação com campos de bits.

  • Segurança e Facilidade:
    Evita erros e a complexidade do tratamento manual de bits.

  • Flexibilidade:
    Aceita qualquer implementação de Set, embora o uso principal seja EnumSet.

6. Desvantagem e Solução Temporária:

  • Imutabilidade:
    Não é possível criar uma EnumSet imutável (até o Java 9).

  • Solução Temporária:
    Pode-se envolver EnumSet com Collections.unmodifiableSet, embora com perda de concisão e desempenho.

Conclusão:
Use EnumSet em vez de campos de bits para representar conjuntos de valores enum. EnumSet oferece um desempenho comparável, com maior clareza, segurança e facilidade de uso, evitando as limitações e complexidades associadas aos campos de bits.

Top comments (0)