Vorwort
In unserer täglichen Programmierung gibt es oft solche "Datensätze", deren Werte im Programm stabil sind, und die Elemente in den "Datensätzen" sind begrenzt. Zum Beispiel bilden sieben Datenelemente von Montag bis Sonntag eine Woche "Datensatz" und vier Datenelemente aus Frühling, Sommer, Herbst und Winter einen "Datensatz" der vier Spielzeiten. Wie kann ich diese "Datensätze" in Java besser verwenden? Daher ist die Aufzählung nützlich
Die Aufzählung ist tatsächlich ein Typ, ähnlich wie int und char, was bedeutet, dass die Eingabe beim Definieren von Variablen einschränkt. Sie können nur die in Enum angegebenen Werte zuweisen.
Enum -Implementierung
JDK5 bietet die Implementierung von Java -Enum -Typen, die mehr syntaktischer Zucker als ein neuer Typ sind.
Öffentliche Enum -Saison {Frühling, Sommer, Herbst, Winter}Schauen wir uns an, wie dieser Code über das Dekompilierungstool implementiert wird. Der dekompilierte Code lautet wie folgt:
Public Final Class Saison erweitert Enum {public statische Saison [] values () {return (Saison []) $ vales.clone (); } public statische Saisonwert (string s) {return (saison) enum.valueof (saison, s); } private Saison (String s, int i) {super (s, i); } öffentliche statische Final -Saison Frühling; öffentliche statische Final -Saison Sommer; öffentliche statische Final -Saison Herbst; öffentliche statische Final -Final -Saison Winter; private statische Finale $ values []; static {Spring = New Season ("Spring", 0); Sommer = neue Saison ("Sommer", 1); Herbst = neue Saison ("Herbst", 2); Winter = neue Saison ("Winter", 3); $ Values = (neue Saison [] {Spring, Sommer, Herbst, Winter}); }} Durch die Dekompeten des Codes finden Sie:
1. Season ist eine gewöhnliche Klasse, die von Enum erbt und durch final Schlüsselwort geändert wird, um die Erbschaft zu vermeiden.
2. SPRING , SUMMER , AUTUMN und WINTER im Aufum sind statische Instanzen Season und werden in der Klassenkonstruktor <clinit> -Methode initialisiert.
3. values() gibt eine Kopie der privaten Variablen $VALUES[] $VALUES[] zurück, die auch in <clinit> initialisiert wird.
Wie man Enum benutzt
1. Singleton -Modus
Wir wissen bereits, dass der Klassenkonstruktor <clinit> während der Initialisierungsstufe der Klassenbelastung nur durch einen Thread ausgeführt werden kann, sodass jede Instanz der Aufzählung und nur eine Kopie im Java -Haufen hat. Diese Funktion erleichtert die Aufzählung, das Singleton -Muster zu implementieren. Genau so befürwortet der effektive Java -Autor Josh Bloch die Verwendung von Singleton -Mustern.
public enum singleton {instance;} 2. Verwenden Sie im Switch
3.. Benutzerdefinierte Felder und Methoden
Zusätzlich zu Standardfeldern und Methoden in Enums können Sie sich für die Geschäftslogik anpassen.
public enum enumTest {plus (" +") {@Override public int bind (int arg1, int arg2) {return arg1 + arg2; }}, Sub (" -") {@Override public int bind (int arg1, int arg2) {return arg1 - arg2; }}; endgültiger Stringbetrieb; EnumTest (String Operation) {this.operation = operation; } Abstract Int Bind (int arg1, int arg2);}4. Implementieren Sie die Schnittstelle
Schnittstellenoperation {int operation (int arg1, int arg2);} public EnumTest implementiert die Operation {plus (" +") {@Override public int operation (int arg1, int arg2) {return arg1 + arg2; }}, Sub (" -") {@Override public int operation (int arg1, int arg2) {return arg1 - arg2; }}; endgültiger Stringbetrieb; EnumTest (String Operation) {this.operation = operation; }} In praktischen Anwendungen können "+" und "-" als Schlüssel, plus und sub als value verwendet werden und sie in HashMap in hashMap vorab. Die spezifische Verwendungsmethode lautet wie folgt:
Operation Operation = HashMap.get ("+"); int result = operation.bind (1, 2);Zusammenfassen
Im obigen dreht sich alles um die Auflauftypen in Java. Ich hoffe, dass dies durch die Einführung dieses Artikels in Java für alle hilfreich sein kann. Wenn Sie Fragen haben, überlassen Sie bitte eine Nachricht, um zu kommunizieren.