Was ist eine Aufzählung?
Die Aufzählung ist eine neue Funktion, die von JDK5 eingeführt wird. In einigen Fällen ist ein Objekt einer Klasse festgelegt und kann als Enum definiert werden. In der tatsächlichen Verwendung können Aufzählungstypen auch als Spezifikation verwendet werden, um die Sicherheit von Programmparametern sicherzustellen. Die Aufzählung hat die folgenden Eigenschaften:
java.lang.Enum in Java und implementiert zwei Schnittstellen: java.lang.Seriablizable und java.lang.Comparable .public static final , und nicht abstrakte Aufzählungsklassen können Unterklassen nicht ableiten. Hier ist equals() in java.lang.Enum -Klasse:
// Dies ist endgültig modifiziert, und Unterklassen dürfen nicht die öffentliche endgültige Boolesche gleich umschreiben (Objekt Andere) {return this == other;} Gemeinsame Methoden zur Aufzählung
int compareTo(E o)
Vergleichen Sie die Reihenfolge dieser Aufzählung mit dem angegebenen Objekt. Wenn das Objekt kleiner als das angegebene Objekt ist, werden negative Ganzzahlen, Null- oder positive Ganzzahlen zurückgegeben. Aufzählungskonstanten können nur mit anderen Aufzählungskonstanten desselben Enumentyps verglichen werden.
// Quellcode in enum public Final int vergleicheto (e o) {enum other = (enum) o; Enum self = this; if (self.getClass ()! return self.ordinal - other.ordinal;} String name()
Gibt den Namen dieser Enum -Instanz zurück.
static values()
Gibt ein Array zurück, das alle Enum -Werte enthält, die verwendet werden können, um alle Enum -Werte zu iterieren.
String toString()
Gibt den Namen dieser Enum -Instanz zurück, dh den Enumswert. Gleich wie name() .
// name () und toString () in enum public String toString () {return name;} public Final String name () {return name;} int ordinal()
Gibt den Indexwert des Enumswerts in der Enum -Klasse (ab 0) zurück, dh der Reihenfolge des Enumswerts in der Enum -Deklaration, die von der Reihenfolge der Enumswertdeklaration abhängt.
<T extends Enum<T>> valueOf()
Gibt eine Aufzählungskonstante des angegebenen Enum -Typs mit dem angegebenen Namen zurück. Der Name muss genau mit der Kennung übereinstimmen, mit der die Aufzählungskonstante in diesem Typ deklariert wird (zusätzliche Whitespace -Zeichen sind nicht zulässig). Diese Methode entspricht dem ToString. Wenn wir also toString() überschreiben müssen, müssen wir valueOf() überschreiben (wir können toString() Methode toString() überschreiben, aber wir können valueOf() valueOf() nicht selbst überschreiben.
Anwendung der Aufzählung
Die Aufzählung ist ein besonderer Typ, und seine Verwendung ist dem der gewöhnlichen Klassen sehr ähnlich.
Ersetzen Sie eine Reihe von Konstanten
public enum color {rot, grün, leer, gelb} Verwendet in Switch -Anweisungen
// Switch hat Unterstützung für Enum in JDK1.6 Enum -Signal {grün, gelb, rot} ... Switch (Farbe) {case rot: color = signal.green; brechen; } ... Fügen Sie Methoden hinzu, um aufzurüten
public enum color {rot ("rot"), grün ("grün"), leer ("weiß"), yello ("gelb"); // Member Variable Private String Name; // Konstruktor private Farbe (String -Name) {this.name = name; } // set method public String getName () {return name; } public void setName (String -Name) {this.name = name; }} Implementieren Sie die Schnittstelle
öffentliches Schnittstellenverhalten {void print (); } public enum color implementiert Verhalten {rot ("rot", 1), grün ("grün", 2), leer ("weiß", 3), yello ("gelb", 4); // Schnittstellenmethode @Override public void print () {System.out.println (this.index+":"+this.name); }} Aufzählungsklasse mit abstrakten Methoden
public enum operation {// verwendet zur Durchführung von Additionsoperationen plus {// Der Teil der Klammern ist tatsächlich eine anonyme interne Unterklasse @Override öffentliche Doppelberechnung (Double X, Double Y) {return x + y; }}, // wird verwendet, um Subtraktionsoperationen minus {// Der Teil der Klammern auszuführen, tatsächlich eine anonyme interne Subklasse @Override öffentliche Doppelberechnung (Double X, Double Y) {// Todo automatisch generierte Methode Stub Return x - y; }}, // verwendet zur Durchführung von Multiplikationsoperationen. {// Der Teil der Klammern ist tatsächlich eine anonyme interne Subklasse @Override öffentliche Doppelberechnung (Double X, Double Y) {return x * y; }}, // verwendet zur Durchführung der Division Operation Divide {// Der Teil der Curly -Klammern ist tatsächlich eine anonyme interne Subklasse @Override public double calculate (double x, double y) {return x / y; }}; // Definieren Sie eine abstrakte Methode für diese Aufzählungsklasse. Alle Enum -Werte in der Aufzählungsklasse müssen diese Methode implementieren. Public Abstract Double Calculate (Double X, Double Y);} Implementierung von Singletons mit Aufzählungen (Best Practice für Singletons)
Nutzen:
1. Verwenden Sie die Merkmale der Aufzählung, um einzelne Fälle zu implementieren
2. Die JVM sorgt für die Sicherheit der Fadensicherheit
3.. Serialisierungs- und Reflexionsangriffe wurden durch Aufzählung gelöst
public enum singleton {instance; public Singleton getInstance () {// Fügen Sie diese Methode hinzu, damit andere verstehen, wie sie sie verwenden können, da diese Implementierungsmethode relativ selten ist. Rückkehrinstanz; }} Andere Verwendung der Aufzählung
Enumset
range(E from, E to)
Holen Sie sich eine Reihe von Set aus dem Enum -Wert.
für (Wochentagstag: Enumset.Range (Wochentagemon.mon, Wochentags.Fri)) {System.out.println (Tag); } of(E first, E... rest)
Erstellt eine Aufzählung, die ursprünglich die angegebenen Elemente enthält.
noneOf(Class<E> elementType)
Erstellt eine leere Aufzählung mit dem angegebenen Elementtyp.
ENGENAP
EnumMap(Class<K> keyType)
Erstellt eine leere Aufzählungskarte mit dem angegebenen Schlüsseltyp.
Karte <Wetter, Schnur> eNummap = newnum <weather, saite> (weather.class); enummap.put (weather.sunny, "sunny"); enummap.put (weather.rainy, "regnery");
Aufzählung in Android
Enum muss eine große Menge an Gedächtnis belegen. Wenn es empfindlich gegenüber Speicher ist, versuchen Sie, Enum so wenig wie möglich zu verwenden und ihn durch eine statische Konstante zu ersetzen.
Wenn Sie jedoch keine Aufzählung verwenden, treten einige Sicherheitsrisiken auf, sodass der Beamte zwei Annotationen gestartet hat, die während der Zusammenstellung Zeit zum Ersetzen der Aufzählung vom Typ überprüft werden können. Diese beiden Anmerkungen sind: @Intdef und @stringdef. Befindet sich in Compile 'com.android.support:Support-Annotations:+'.
Beispiel für die Nutzung
Die Verwendung von @stringdef steht @Intdef überein. Hier nehmen wir @Intdef als Beispiel.
öffentliche Schnittstelle QrCodetype {int WeChat = 0; int alipay = 1; @Intdef ({Wechat, alipay}) @Retention (retentionPolicy.source) @target ({elementtype.field, elementtype.method, elementtype.parameter}) @Interface Checker {}} öffentliche Klasse QrCode { @qrcodetype.Checker //Checker //. public void setType (@qrcodetype.Checker int type) {// im Parameter this.type = type; } @QrCodetype.Checker // Definieren Sie in der Methode (dh den Typ des Rückgabewerts) public int getType () {return type; }} Empfehlungen für den Gebrauch
Der am weitesten verbreitete Bereich in der Entwicklung besteht darin, Aufzählungen anstelle einer Reihe statischer Konstanten zu verwenden. In diesem Fall kann stattdessen die obige Annotationsmethode verwendet werden.
Wenn eine Aufzählung auch andere Funktionen enthält (z. B.: einschließlich anderer definierter Methoden), kann sie nicht ersetzt werden.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, der Inhalt dieses Artikels wird Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.