Este artículo estudia principalmente el contenido relevante de Enumset en lugar del dominio Bit en Java, como se detalla a continuación.
Notas de lectura "Efective Java China Versión 2"
La notación del dominio de bit permite que las operaciones de bit se realicen de manera efectiva, como la unión y la intersección. Pero el dominio bit tiene todas las desventajas de siempre iluminar la intencamerios, y aún más. Cuando el campo de bits se imprime en forma digital, es mucho más difícil traducir una constante de intencionización simple. Incluso no hay una manera fácil de atravesar todos los elementos representados por un campo bit.
// Constante de enumeración de campo de bit - Test de clase ObsoleTepublic {public static final byte style_bold = 1 << 0; // 1 Public Static final byte style_italic = 1 << 1; // 2 Public Static Final Byte style_underline = 1 << 2; // 4 Public Static final byte style_strikethrough = 1 << 3; // 6 // El parámetro es bitwise o de cero o más estilos_ constantes public void Applystyles (int Styles) {...}}El paquete java.util proporciona la clase enumset para representar efectivamente múltiples colecciones de múltiples valores extraídos de un solo tipo enum. Esta clase implementa la interfaz establecida, proporcionando una rica funcionalidad, seguridad de tipo e interoperabilidad que se puede obtener de cualquier otra implementación establecida. Sin embargo, en la implementación específica interna, cada contenido de enumset se representa como un vector de bits. Si el tipo de enumación subyacente tiene 64 o menos elementos, la mayoría de ellos lo son. Todo el enumset está representado por un solo largo, por lo que su rendimiento es mejor que el rendimiento del dominio superior. El procesamiento por lotes, como RemoveAll y Reteneral, se implementan utilizando algoritmos de bits. Al igual que reemplazar manualmente los dominios de bits. Pero puede evitar errores propensos a operaciones manuales y un código menos elegante, porque Enumset hace esta tarea difícil por usted. ``
// enumset: un reemplazo moderno para el texto de la clase de los campos de bitspublic {Public Enum Style {Bold, Italic, Subline, Strikethrough}; // Cualquier conjunto podría pasar, pero enumset es claramente el mejor público Void AplicatStyles (set <style> Styles) {System.out.println (Styles); } public void test () {ApplyStyles (enumset.of (style.bold, style.italic)); }} Ejecutar test() y salida [BOLD, ITALIC] .
La clase Enumset combina la simplicidad y las ventajas de rendimiento de los dominios de bits y todas las ventajas de los tipos de enumes, por lo que no hay razón para usar la notación del dominio Bit nuevamente. A menos que sea un campo que constituya un protocolo de comunicación.
Pero, de hecho, enumset también tiene una desventaja: no puede crear enumset inmutables, pero podemos encapsular el enumset con colecciones.
public void test () {enumset <style> styles = enumset.of (style.bold, style.italic); Establecer <Syle> unmodifiablestyle = Collections.unmodifiAbleset (estilos); unmodifiablestyle.add (style.underline);}De esta manera, si agrega elementos al UnmodifiAbleset, informará java.lang.unsupportedOperationException
Resumir
Lo anterior es toda la explicación detallada de Enumset en lugar del código Bitfield en Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!