Über Aufzählung
Die meisten der an den Orten geschriebenen Aufzweigungen erhalten eine Aufzählung und dann beginnt das Beispiel zu wechseln. Aber ich möchte sagen, dass die Daten aus meinem Code wahrscheinlich nicht umgebracht werden, normalerweise Zeichenfolgen oder Zahlen. Nach dem Parsen einer SQL bestine ich beispielsweise zuerst den SQL -Typ. Durch Abfangen des SQL -Token kann der Abfang ausgewählt, löschen, aktualisieren, einfügen, verändert usw. sind, aber es sind alle Saiten. Zu diesem Zeitpunkt möchte ich Enums benutzen, aber ich kann es nicht tun. Wie konvertiere ich die Zeichenfolge in eine Aufzählung? Ähnliche Situationen umfassen Daten aus der Datenbank herauszuholen und Urteile zu fällen, die auf einigen Typen basieren, Daten von der Seite zu übergeben und unterschiedliche Vorgänge nach verschiedenen Typen durchzuführen. Es handelt sich jedoch um alle Zeichenfolgen, nicht um Enums. Die Tragödie ist, dass ich selten jemanden sehe, der dieses Ding schreibt; Also habe ich es aufgeschrieben und gehofft, dass jemand es benutzen kann.
Warum sollten Sie zunächst die Aufzählung verwenden? Wann ist es besser, Enums zu benutzen? Was sind die Vorteile der Verwendung von Enums?
Ich denke, wenn Sie sich in einigen Kategorienklassen befinden und die Typen auflisten und unverändert haben, um das Programm an verschiedene Orte zu leiten, ist die Verwendung der Aufzählung eine bessere Wahl.
Es klingt ein bisschen verwirrend, aber es gibt ein Beispiel, das zum Beispiel verstanden werden könnte:
Wir können die Dinge, die wir an unseren täglichen Arbeitstagen tun, auflisten:
Zur Arbeit gehen, Meetings haben, essen, schlafen usw.
Wir können die Teile auflisten, die von der HNO -Abteilung des Krankenhauses untersucht werden müssen:
Augen, Nase, Ohren, Mund usw.
Diese können aufgezählt werden, und wir müssen jeden von ihnen auf andere Weise tun.
Natürlich können Sie sagen:
1. Es kann dynamisch über Konfigurationsdateien oder Anmerkungen versandt werden.
2. Konstanten können verwendet werden, um ähnliche Effekte zu erzielen;
3. drücken Sie es direkt durch die Gleichen der Zeichenfolge aus und drücken Sie sie mit, wenn sonst
Wenn Sie die Konfigurationszusatzmethode verwenden, um sie zu versenden, ist sie flexibel und einfach zu ändern. Wenn wir jedoch viele Parameter verwenden, die nicht häufig geändert werden, erhöhen wir häufig die Konfigurationsbelastung. Wenn Sie die Systemlogik lesen müssen, müssen Sie die Konfiguration und den Code erneut lesen. Wenn die Parameter jedoch dynamisch transformierbare Informationen sind, ist die Verwendung der Konfiguration die richtige Wahl.
Die Verwendung von Konstanten ist in der Regel Zahlen beim Wechsel von Fällen, und Zeichenfolgen können in Java keine Schaltkoffer sein. Der Zweck der Verwendung von Konstanten erhöht die Lesbarkeit als Fall 1 und Fall 2 ... aber auch String -Daten sind problematisch. Wenn es nicht wieder zugeordnet ist, ist es nicht erforderlich. Tatsächlich ist die Aufzählung für Sie fast einmal zugeordnet, aber sie verkörpert nur den Code. Seit es geschafft und syntaktisch unterstützt wurde, warum nicht verwenden, verwenden Sie es! Zweitens haben sie, obwohl Konstanten die Lesbarkeit erhöhen, nicht das Konzept von Kategorien und Managementtypen. Das heißt, eine Enum -Definition definiert eine Kategorie, in der die für diesen Bereich benötigten Dinge gut aufgeführt sind. Konstanten sind in der Regel einige von sich selbst definierte Pools, in einigen öffentlichen Klassen oder zufällig definiert und sind relativ verstreut. Darüber hinaus ist die Aufzählung beim Umschalten klar definiert, und der Fall liegt im Bereich der Sperraufzählung. Es kann nicht nur das System steuern, die Lesbarkeit erhöhen, sondern auch prüfen, welche Auflaufinformationen in dieser Kategorie jederzeit vorliegen, um die Funktion der Betrachtung von Konfigurationsdateien zu erreichen. In diesem Satz kehrt es jedoch immer noch zurück, wenn die Parameter variabel sind, ist es für die Aufzählung nicht geeignet. Aufzählungen müssen aufgezählt werden oder die aktuellen Systemüberlegungen können aufgezählt werden. Zum Beispiel kann es im obigen Krankenhaus viele Krankenhäuser geben, aber das derzeitige Krankenhaus verarbeitet nur einige Teile und verarbeitet andere nicht. Das ist der Grund. Was ist Variable? Beispielsweise werden URL -Parameter an die entsprechende Methode versandt. Es ist für jeden unmöglich, ein Stück Logik hinzuzufügen und einen Enumerator und einen Fall hinzuzufügen. Zu diesem Zeitpunkt ist es besser, [Konfiguration + Dynamische Methode Sendung] zu verwenden. Natürlich kann die Konfiguration nur eine Datei oder Annotation sein.
Das rustikalste ist, die Zeichenfolge gleich zu verwenden, um sie zu implementieren, wenn sonst sonst. Haha, daran ist nichts auszusetzen, aber das ist auf verstreute Weise geschrieben. Zweitens muss jedes Matching -Gleichstrom jedes Mal mit jedem Charakter verglichen werden, wenn Sie den Gleichen übereinstimmen. Wenn Sie viel in Ihrem Code schaufen, ist die Leistung nicht sehr gut und der Rest wird nach der oben genannten Beschreibung klarer sein.
Zweitens bietet Enumeration eine Typ-Management-Komponente, die das objektorientierte System perfekter macht, sodass einige Arten von Verwaltung konfiguriert und verwaltet werden können. Wenn die Aufzählung verwendet wird, können Sie die Definition der Aufzählung finden, die verarbeitet und nicht verarbeitet wurde, und die oben genannten sind schwer zu erreichen. Beispielsweise gibt es 10 Arten von Betriebstypen in Datenbanken. Im Prozess der Ermittlung kann die Aufzählung wie eine Konfigurationsdatei betrachtet werden und es ist sehr einfach zu verwalten.
Schließlich ist die Aufzählung absolut Singleton, und die Vergleichsleistung ist vergleichbar mit der der digitalen Leistung, die sowohl Lesbarkeit als auch Leistung erzielen kann.
Grundlegende Verwendung des Enumtyps
Schauen wir uns bei einer solchen theoretischen Basis die Enum -Enum -Typen in Java an:
1. Sie können Variablen und Methoden zum Enum hinzufügen
Schauen wir uns ein Codebeispiel an:
public enum state {normal ("normal", 1), update ("aktualisiert", 2), gelöscht ("gelöscht", 3), gefeuert ("maskiert", 4); // Member Variable Private String Name; privater Int -Index; // Methode konstruieren, Hinweis: Der Konstruktor kann nicht öffentlich sein, da Enum nicht instanziiert werden kann, dass privater Zustand (String -Name, int Index) {this.name = name; this.index = index; } // Normal Methode public static String getName (int Index) {für (Zustand c: Status .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; }}Aus dem obigen Code können wir sehen, dass nach der Definition des Enumswerts und des Hinzufügens eines Semikolons Sie ihm dann andere Variablen und Methoden definieren können. Es ist insbesondere zu beachten, dass die Konstruktionsmethode in Enum nicht von der Öffentlichkeit identifiziert werden kann. Dies geschieht, um den Benutzer daran zu hindern, die Enum zu instanziieren.
2. kann verwendet werden, um Konstanten zu definieren
Überprüfen Sie zunächst, wie Sie Konstanten in Java definieren und den folgenden Code sehen:
public static final int normalstate = 1; privat static final int updateState = 2;
Im Folgenden können wir auch Enum Enum verwenden, um die obige konstante Definition zu ersetzen. Der Code lautet wie folgt:
public enum state {normal, aktualisiert, gelöscht, entlassen}Es gibt keinen Syntaxvorteil bei der Verwendung von Enum, um Konstanten in Java zu definieren, aber der Enum -Enum -Typ kann mehr Betriebsfunktionen liefern.
3. Implementieren Sie die Schnittstelle in Enum
Schauen wir uns zunächst den folgenden Code an:
public interface icanReadState {void read (); String getState ();} öffentliche Enum -Status implementiert IcanReadState {normal ("normal", 1), update ("aktualisiert", 2), gelöscht ("gelöscht", 3), gefeuert ("maskiert", 4); privater Zeichenfolge Name; privater Int -Index; privater Zustand (String -Name, int Index) {this.name = name; this.index = index; } // Schnittstellenmethode 1 @Override public String getState () {return this.name; } // Schnittstellenmethode 2 @Override public void read () {System.out.println (this.index + ":" + this.name); }}Genau wie die Verwendung von Schnittstellen in allgemeinen Klassen kann das Enum Enum auch die Schnittstelle erben und alle Methoden in der Schnittstelle implementieren. Der Vorteil davon ist, dass es bequemer sortieren, vergleichen kann und andere Vorgänge für die Werte im Aufzähler haben und eine bessere Einkapselung aufweisen können.
Beispiel
Lassen Sie uns zunächst eine einfache Aufzählung definieren (hier ist nur ein Beispiel, also definieren wir einfach 3 Variablen):
public enum sqltypeenum {einfügen, aktualisieren, löschen, auswählen}Nach dem Parsen von SQL wird ein Token erhalten. Wie bekommen wir die Aufzählung dieses Tokens?
Erhalten Sie es so:
String token = "select";
Wenn nicht erhalten, wird Java eine Ausnahme auswerfen: illegalArgumentException keine enum const class sqltypeenum.xxx
Der Grund, warum ich Kapitalisierung mache, ist, dass Enums auch aktiviert werden (wenn Ihr Enum in Kleinbuchstaben ist, sind Sie natürlich in Kleinbuchstaben, aber es ist problematischer, es zu mischen). Tatsächlich ruft ValueOf die zugrunde liegende Zuordnung des Enum auf:
Diese Methode wird beim Aufrufen aufgerufen:
Es gibt also auch eine Hashmap, haha!
Nachdem Sie diese Informationen erhalten haben, können Sie den gewünschten Betrieb ausführen:
Switch (SQLTYPeenum) {Case Insert: Handle Insert Logic; brechen; Fall löschen: LOGIC LELETEN; brechen; ....}OK, manchmal möchten wir möglicherweise keine Zeichenfolgen wie Einfügen oder Aktualisieren direkt in der Interaktion verwenden, da die Namensschwerpunkte oft erforderlich sind.
Definieren Sie beispielsweise einige Benutzeraktionstypen:
1. Speichern Sie Benutzerinformationen
2. Erhalten Sie grundlegende Benutzerinformationen über ID
3. Holen Sie sich die Benutzerliste
4.. Benutzerinformationen über ID löschen
usw.
Wir können Aufzählungen definieren wie:
public enum userOptionenum {save_user, get_user_by_id, get_user_list, delete_user_by_id}Die Systemmethoden und einige Keyword -Konfigurationen werden jedoch normalerweise als:
SaveUser, GetUserById, GetUserById, DeleteUserById
Natürlich hat jeder seine eigenen Regeln, aber wenn Sie die Mapping in der Mitte nicht durchführen möchten, ist es nur Kompromisse bei ihr. Ersetzen Sie entweder alle Auflaufnamen, die ziemlich seltsam erscheint, oder ersetzen Sie alle Methodennamen, was noch seltsamer ist, oder Sie können die Zuordnung selbst durchführen. Ok, es ist ein bisschen problematischer, aber es ist eigentlich nicht problematisch?
Schreiben wir zunächst eine Methode, um aufgezählte Daten in Unterstriche in Kamele zu konvertieren und sie in einen StringUtils zu setzen:
public static String convertDBstyletojavastyle (String dstoylestring, boolean erforpper) {dbstylestring = dbstylestring.tolowerCase (); String [] tokens = dsteinString.split ("_"); StringBuilder StringBuilder = new StringBuilder (128); int länge = 0; für (String Token: Tokens) {if (stringutils.isnotblank (token)) {if (length == 0 &&! Erstupper) {stringBuilder.append (token); } else {char c = token.charat (0); if (c> = 'a' || c <= 'z') c = (char) (c - 32); StringBuilder.Append (c); StringBuilder.Append (token.substring (1)); }} ++ Länge; } return StringBuilder.toString (); }Eine Methode überladen:
public static String convertDBstyletojavalocalStyle (String dstoeterstring) {return convertDBstyletojavastyle (Dstoylestring, False); }Dann definieren Sie die Aufzählung:
public enum userOptionenum {save_user, get_user_by_id, get_user_list, delete_user_by_id; private endgültige statische Karte <String, userOptionenum> enum_map = new HashMap <String, userOptionenum> (64); static {for (userOptionenum v: values ()) {enum_map.put (v.toString (), v); }} public staticUseroptionenum fromString (String v) {userOptionenum userOptionenum = enum_map.get (v); userOptionenum zurückgeben == null? Standard: userOptionenum; } public String toString () {String StringValue = super.toString (); return Stringutil.ConvertDBstyletojavalocalStyle (StringValue); }}OK, geben Sie einen solchen Ereignisparameter über, so dass, wenn es: SaveUser, verwenden Sie:
String event = "SaveUser"; // Wenn Sie das Parameter userOptionEnum ENum = userOptionEnum.fromstring (Ereignis) erhalten;
Tatsächlich habe ich selbst eine Hashmap gemacht und einen From -String hinzugefügt, weil es einige Einschränkungen bei der Aufzählung gibt und einige Methoden Ihnen nicht überschreiben können, wie z. B. die ValueOF -Methode.
Eigentlich gibt es nichts zu sagen. Sprechen wir über das Hinzufügen einiger benutzerdefinierter Variablen zu Enums. In der Tat ähneln die anderen Aufzüge, außer als Singleton, den normalen Klassen. Sie können auch Konstruktormethoden haben, jedoch nicht standardmäßig. Sie können auch benutzerdefinierte Variablen bereitstellen und anschließend Methoden erhalten und erhalten. Wenn es jedoch festgelegt ist, ist der Thread nicht sicher. Achten Sie also auf diesen Punkt. Die Konstruktionsmethode ist also im Allgemeinen geschrieben:
public enum sqltypeenum {einfügen ("in"), delete ("löschen von") ...... weggelassen; private Zeichenfolge Name; // benutzerdefinierte Variable private private SQLTYPeenum (String -Name) {this.name = name; } public String getName () {return name; } public String toString () {return name + "i Dash"; // Schreiben Sie die ToString -Methode neu} // Im Allgemeinen nicht empfohlen public void setName (String -Name) {this.name = name; }}Angerufen:
SQLTYPeenum SQLTYPeenum = SQLTYPeenum.ValueOf ("Insert"); System.out.println (SQLTYPeenum); System.out.println (sqltypeenum.getName ());Es wird nicht empfohlen, es zu nennen:
sqltypeenum.setName ("verdammt");In einem anderen Thread:
SQLTYPeenum SQLTYPeenum = SQLTYPeenum.ValueOf ("Insert"); System.out.println (SQLTYPeenum); System.out.println (sqltypeenum.getName ());Ich fand, dass das Ergebnis geändert wurde, haha!