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…


This content originally appeared on DEV Community and was authored by Giselecoder

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.


This content originally appeared on DEV Community and was authored by Giselecoder


Print Share Comment Cite Upload Translate Updates
APA

Giselecoder | Sciencx (2024-06-20T01:37:10+00:00) Item 36: Use a classe EnumSet em vez dos campos de bits. Retrieved from https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/

MLA
" » Item 36: Use a classe EnumSet em vez dos campos de bits." Giselecoder | Sciencx - Thursday June 20, 2024, https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/
HARVARD
Giselecoder | Sciencx Thursday June 20, 2024 » Item 36: Use a classe EnumSet em vez dos campos de bits., viewed ,<https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/>
VANCOUVER
Giselecoder | Sciencx - » Item 36: Use a classe EnumSet em vez dos campos de bits. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/
CHICAGO
" » Item 36: Use a classe EnumSet em vez dos campos de bits." Giselecoder | Sciencx - Accessed . https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/
IEEE
" » Item 36: Use a classe EnumSet em vez dos campos de bits." Giselecoder | Sciencx [Online]. Available: https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/. [Accessed: ]
rf:citation
» Item 36: Use a classe EnumSet em vez dos campos de bits | Giselecoder | Sciencx | https://www.scien.cx/2024/06/20/item-36-use-a-classe-enumset-em-vez-dos-campos-de-bits/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.