Dieser Artikel untersucht hauptsächlich den relevanten Inhalt von Enumset anstelle von Bit -Domäne in Java, wie unten beschrieben.
Lesen von Notizen "Effektive Java Chinese Version 2"
Die Bit -Domain -Notation ermöglicht es, Bit -Operationen wie Gewerkschaft und Kreuzung effektiv durchzuführen. Aber die Bit -Domäne hat alle Nachteile, wenn die Int -Aufzählung immer beleuchtet wird, und noch mehr. Wenn das Bitfield in digitaler Form gedruckt wird, ist es viel schwieriger, eine einfache Intumerationskonstante zu übersetzen. Auch es gibt keine einfache Möglichkeit, alle von einem Bitfield dargestellten Elemente zu durchqueren.
// Bit Field Enumeration Constant - veraltetem Klassen -Test {public static Final Byte style_bold = 1 << 0; // 1 öffentliche statische endgültige Byte style_italic = 1 << 1; // 2 öffentliches statisches endgültiges Byte style_underline = 1 << 2; // 4 öffentliches statisches endgültiges Byte style_strikethrough = 1 << 3; // 6 // Parameter ist bitweise oder von Null oder mehr Style_ Constants public void applystyles (int stiles) {...}}Das Java.util -Paket bietet die Enumset -Klasse, um mehrere Sammlungen mehrerer Werte effektiv darzustellen, die aus einem einzelnen Enum -Typ extrahiert wurden. Diese Klasse implementiert die festgelegte Schnittstelle und bietet eine umfassende Funktionalität, Type Sicherheit und Interoperabilität, die aus jeder anderen festgelegten Implementierung erhalten werden kann. In der internen spezifischen Implementierung wird jedoch jeder Enumset -Inhalt als Bitvektor dargestellt. Wenn der zugrunde liegende Enum -Typ 64 oder weniger Elemente hat - die meisten davon sind es. Das gesamte Enumset wird durch eine einzige Länge dargestellt, sodass seine Leistung besser ist als die Leistung der oberen Domäne. Die Batch -Verarbeitung wie Removeall und Retainall werden unter Verwendung von Bit -Algorithmen implementiert. Genau wie manuelles Ersetzen von Bit -Domains. Sie können jedoch Fehler vermeiden, die anfällig für manuelle Vorgänge und weniger elegantes Code sind, da Enumset diese schwierige Aufgabe für Sie erledigt. `
// Enumset - Ein moderner Ersatz für Bit FieldsPublic -Klasse {public enum style {fett, kursiv, unterstrichen, striiken}; // Jedes Set könnte übergeben werden, aber Enumset ist eindeutig die beste öffentliche Void -Anwendungstile (Set <Styles> Styles) {System.out.println (Styles); } public void test () {applyStyles (enumset.of (style.bold, style.italic)); }} Führen Sie test() und Ausgabe [BOLD, ITALIC] aus.
Die Enumset -Klasse kombiniert die Einfachheit und Leistungsvorteile von Bit -Domänen und allen Vorteilen von Enum -Typen. Daher gibt es keinen Grund, die Bit -Domain -Notation erneut zu verwenden. Es sei denn, es ist ein Feld, das ein Kommunikationsprotokoll darstellt.
Tatsächlich hat Enumset jedoch auch einen Nachteil - es kann keine unveränderliche Enumset erzeugen, aber wir können das Enumset mit Sammlungen zusammenschließen.
public void test () {enumSet <Styles> styles = enumset.of (style.bold, style.italic); Set <Styles> unmodifiabyle = collectionss.unmodifiableset (Styles); unmodifiabyle.add (style.underline);};Wenn Sie dem Unmodifiableset Elemente hinzufügen, werden Sie java.lang.unsupportedoperationException melden
Zusammenfassen
Das obige ist die detaillierte Erklärung von Enumset anstelle von Bitfield -Code in Java. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!