1. Hintergrund
Bevor die Java -Sprache eingeführt wurde, besteht das gemeinsame Muster für die Angabe eines Enumentyps darin, eine Reihe von INT -Konstanten zu deklarieren. Der Code, den wir früher definiert haben, bevor wir die öffentliche endgültige statische Methode verwendeten, ist wie folgt und verwendet 1, um den Frühling zu repräsentieren, 2 für den Sommer, 3 für den Herbst und 4, um den Winter zu repräsentieren.
öffentliche Klassensaison {public static Final int Spring = 1; öffentliches statisches Finale int summer = 2; öffentliche statische endgültige int herumn = 3; public static final int winter = 4;}Diese Methode wird als Int -Aufzählungsmuster bezeichnet. Aber was ist los mit diesem Modell? Wir haben es so lange verwendet, also sollte es kein Problem geben. Normalerweise berücksichtigt der von uns geschriebene Code seine Sicherheit, Benutzerfreundlichkeit und Lesbarkeit. Betrachten wir zunächst seine Art Sicherheit. Natürlich ist dieses Muster nicht vom Typ Typ. Zum Beispiel entwerfen wir eine Funktion, die im Frühjahr, Sommer, Herbst und Winter einen bestimmten Wert erfordert. Mit dem INT -Typ können wir jedoch nicht garantieren, dass der in den Gäste verabschiedete Wert legal ist. Der Code sieht so aus:
private String getChineSeason (int Saison) {StringBuffer result = new StringBuffer (); switch (saison) {case saison.spring: result.append ("fing"); brechen; Fallsaison.Summer: result.append ("summer"); brechen; Fallsaison.autumn: Ergebnis.Append ("Herbst"); brechen; Fallsaison.winter: result.append ("Winter"); brechen; Standard: Ergebnis.Append ("Saison Keine auf Erden"); brechen; } return result.toString (); } public void dosomething () {System.out.println (this.getChineSeason (Saison.spring)); // Dies ist ein normales Szenario -System.out.println (this.getChineseason (5)); // Dies ist ein übermäßiger Szenario, der zu Problemen mit dem Typen -Insecurity} führt}}}Das Programm GetChinesseason (Saison.spring) ist die Methode, die wir anwenden. Aber GetChinesseason (5) ist offensichtlich nicht der Fall, und die Zusammenstellung ist sehr passiv. Wir wissen nicht, was zur Laufzeit passiert. Dies entspricht offensichtlich nicht der Art von Java -Programmen.
Betrachten wir als nächstes die Lesbarkeit dieses Musters. In den meisten Fällen muss ich bei der Verwendung von Aufzählungen bequem sein, um String -Ausdrücke des Enum -Typs zu erhalten. Wenn wir die Int -Aufzählungskonstanten ausdrucken, sehen wir eine Reihe von Zahlen, was nicht sehr nützlich ist. Wir können daran denken, String -Konstanten anstelle von int -Konstanten zu verwenden. Obwohl es für diese Konstanten druckbare Zeichenfolgen bietet, verursacht es Leistungsprobleme, da es auf String -Vergleichsvorgängen beruht. Dieses Muster erwartet auch nicht. In Anbetracht der Sicht der Typen und der Programme der Programme werden die Nachteile der INT- und String -Aufzählungsmuster aufgedeckt. Glücklicherweise wurde seit der Version der Java 1.5 eine weitere alternative Lösung vorgeschlagen, die die Nachteile der INT- und String -Aufzählungsmuster vermeidet und viele zusätzliche Vorteile bietet. Das ist der Enum -Typ. In den folgenden Kapiteln werden die Definitionen, Funktionen, Anwendungsszenarien sowie Vorteile und Nachteile von Aufzählungsarten vorgestellt.
2. Definition <br /> Enum -Typ bezieht sich auf einen rechtlichen Typ, der aus einem festen Satz von Konstanten besteht. In Java wird das Schlüsselwort Enum verwendet, um einen Enum -Typ zu definieren. Das Folgende ist die Definition des Java Enum -Typs.
öffentliche Enum -Saison {Spring, Sommer, Herbst, Winter;} 3. Merkmale
Die Aussagen von Java, die Enumtypen definieren, sind sehr einfach. Es hat die folgenden Eigenschaften:
1) Verwenden Sie den Schlüsselwort Enum 2) Typname, z. B. Staffel 3) eine Zeichenfolge zulässiger Werte wie die oben definierten Frühling, Sommer, Herbst, Winter und Jahreszeiten.
Zusätzlich zu solchen grundlegenden Anforderungen haben Benutzer einige andere Optionen
5) Aufzählungen können ein oder mehrere Schnittstellen (Schnittstellen) implementieren. 6) Neue Variablen können definiert werden
4. Anwendungsszenarien
Schreiben Sie diesen Code mit einem Enum -Typ neu, um die im Hintergrund genannte Art zu übernehmen. Der Code ist wie folgt:
öffentliche Enum -Saison {Spring (1), Sommer (2), Herbst (3), Winter (4); privater Int -Code; private Saison (int Code) {this.code = code; } public int getcode () {return code; }} public class usesandas { / ** * Die englische Saison in die chinesische Saison konvertieren * @param saison * @return * / public String getChineSeason (Saisonsaison) {StringBuffer result = new StringBuffer (); Switch (Saison) {case Spring: result.append ("[Chinesisch: Spring, Aufzählungskonstante:" + saison.name () + ", Daten:" + saison.getCode () + "]"); brechen; Fall Herbst: result.append ("[Chinesisch: Herbst, Aufzählungskonstante:" + saison.name () + ", Daten:" + saison.getCode () + "]"); brechen; Fall Sommer: result.append ("[Chinesisch: Sommer, Aufzählungskonstante:" + saison.name () + ", Daten:" + saison.getCode () + "]"); brechen; Fall Winter: result.append ("[Chinesisch: Winter, Aufzählungskonstanten:" + saison.name () + ", Daten:" + saison.getCode () + "]"); brechen; Standard: result.append ("Saison ohne Erde" + Saison.Name ()); brechen; } return result.toString (); } public void dosomething () {für (Staffel S: saison.Values ()) {System.out.println (getChinesseason (s)); // Dies ist ein normales Szenario} //System.out.println(getchineSeason (5)); // Der Compiler fällt hier bereits aus, was sicherstellt, dass die Sicherheit von Typen} public static void main (String [] arg) {usesandas usesanda = new useSepon (); useSeason.dosomething (); }}[Chinesisch: Frühling, Aufzählungskonstante: Frühling, Daten: 1] [Chinesisch: Sommer, Aufzählungskonstante: Sommer, Daten: 2] [Chinesisch: Herbst, Aufzählungskonstante: Herbst, Daten: 3] [Chinesisch: Winter, Aufzählungskonstante: Winter, Daten: 4]
Hier ist eine Frage: Warum möchte ich die Domain dem Enum -Typ hinzufügen? Ziel ist es, die Daten mit ihren Konstanten zu verbinden. Zum Beispiel repräsentiert 1 den Frühling und 2 Sommer.
5. Zusammenfassung
Wann sollten Sie Enums verwenden? Immer wenn ein fester Satz von Konstanten erforderlich ist, wie z. Die Aufzählung von Java 1.5 kann die Anforderungen der meisten Programmierer erfüllen, und ihre prägnanten und benutzerfreundlichen Merkmale sind sehr herausragend.
6. Verwendung
Verwendung 1: Konstant
public enum color {rot, grün, leer, gelb}Verwendung 2: Schalter
Enum -Signal {grün, gelb, rot} öffentlicher Klasse Veraffellicht {signal color = signal.red; public void Change () {switch (color) {case rot: color = signal.green; brechen; Fall gelb: Farbe = Signal.red; brechen; Case Green: Color = Signal.yellow; brechen; }}}Verwendung 3: Fügen Sie dem Enum eine neue Methode hinzu
public enum color {rot ("rot", 1), grün ("grün", 2), leer ("weiß", 3), yello ("gelb", 4); // Member Variable Private String Name; privater Int -Index; // Methode private Farbe konstruieren (String -Name, int Index) {this.name = name; this.index = index; } // Normal Methode public static String getName (int index) {für (color c: color.Values ()) {if (c.GetIndex () == INDEX) {return C.Name; }} return null; } // set method public String getName () {return name; } public void setName (String -Name) {this.name = name; } public int getIndex () {return index; } public void setIndex (int index) {this.index = index; }}Verwendung 4: Methoden zur Überschreibung der Aufzählung
public enum color {rot ("rot", 1), grün ("grün", 2), leer ("weiß", 3), yello ("gelb", 4); // Member Variable Private String Name; privater Int -Index; // Methode private Farbe konstruieren (String -Name, int Index) {this.name = name; this.index = index; } // methode überschreiben @Override public String toString () {return this.index+"_"+this.name; }}Verwendung 5: Implementieren Sie die Schnittstelle
öffentliches Schnittstellenverhalten {void print (); String getInfo (); } public enum color implementiert Verhalten {rot ("rot", 1), grün ("grün", 2), leer ("weiß", 3), yello ("gelb", 4); // Member Variable Private String Name; privater Int -Index; // Methode private Farbe konstruieren (String -Name, int Index) {this.name = name; this.index = index; } // Schnittstellenmethode @Override public String getInfo () {return this.name; } // Schnittstellenmethode @Override public void print () {System.out.println (this.index+":"+this.name); }}Verwendung 6: Verwenden Sie die Schnittstelle, um die Aufzählung zu organisieren
public interface food {enum kaffee implementiert food {schwarz_coffee, decaf_coffee, latte, cappuccino} enum Dessert implementiert Lebensmittel {Frucht, Kuchen, Gelato}}}Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.