Java Enum (enum)
Java enum ist eine spezielle Klasse, die im Allgemeinen eine Menge von Konstanten repräsentiert, wie die 4 Jahreszeiten eines Jahres, die 12 Monate eines Jahres, die 7 Tage einer Woche und Richtungen wie Osten, Süden, Westen, Norden usw.
Java-Enum-Klassen werden mit dem enum-Schlüsselwort definiert, wobei jede Konstante durch ein Komma getrennt wird,um sie zu trennen.
Definieren Sie zum Beispiel eine Enum-Klasse für Farben.
enum Color
{
RED, GREEN, BLUE;
}
Die obige Enum-Klasse Color hat die Farbkonstanten RED, GREEN, BLUE, die jeweils Rot, Grün und Blau repräsentieren.
Anwendungsbeispiel:
Beispiel
{
RED, GREEN, BLUE;
}
public class Test
{
// Ausführen und das Ergebnis ausgeben
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
Das Ausführen des obigen Codes erzeugt die Ausgabe:
RED
Verwendung von Enums in inneren Klassen
Enum-Klassen können auch in inneren Klassen deklariert werden:
Beispiel
{
enum Color
{
RED, GREEN, BLUE;
}
// Ausführen und das Ergebnis ausgeben
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
Das Ausführen des obigen Codes erzeugt die Ausgabe:
RED
Jedes Enum wird intern durch Class implementiert, und alle Enum-Werte sind public static final.
Die obige Enum-Klasse Color wird in die folgende innere Klassenimplementierung umgewandelt:
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}
Iterieren über Enum-Elemente
Sie können eine for-Anweisung verwenden, um über Enum-Elemente zu iterieren:
Beispiel
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
for (Color myVar : Color.values()) {
System.out.println(myVar);
}
}
}
Das Ausführen des obigen Codes erzeugt die Ausgabe:
RED GREEN BLUE
Verwendung von Enum-Klassen in switch
Enum-Klassen werden oft in switch-Anweisungen verwendet:
Beispiel
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
Color myVar = Color.BLUE;
switch(myVar) {
case RED:
System.out.println("Red");
break;
case GREEN:
System.out.println("Green");
break;
case BLUE:
System.out.println("Blue");
break;
}
}
}
Das Ausführen des obigen Codes erzeugt die Ausgabe:
Blue
Methoden values(), ordinal() und valueOf()
Mit enum definierte Enum-Klassen erben standardmäßig von der Klasse java.lang.Enum und implementieren die Schnittstellen java.lang.Serializable und java.lang.Comparable.
Die Methoden values(), ordinal() und valueOf() befinden sich in der Klasse java.lang.Enum:
- values() gibt alle Werte in der Enum-Klasse zurück.
- Die Methode ordinal() kann den Index jeder Enum-Konstante ermitteln, genau wie ein Array-Index.
- Die Methode valueOf() gibt die Enum-Konstante des angegebenen String-Werts zurück.
Beispiel
{
RED, GREEN, BLUE;
}
public class Test
{
public static void main(String[] args)
{
// values() aufrufen
Color[] arr = Color.values();
// Über das Enum iterieren
for (Color col : arr)
{
// Den Index anzeigen
System.out.println(col + " bei Index " + col.ordinal());
}
// Verwende valueOf(), um eine Enum-Konstante zurückzugeben; eine IllegalArgumentException wird ausgelöst, wenn sie nicht existiert
System.out.println(Color.valueOf("RED"));
// System.out.println(Color.valueOf("WHITE"));
}
}
Das Ausführen des obigen Codes erzeugt die Ausgabe:
RED at index 0 GREEN at index 1 BLUE at index 2 RED
Member der Enum-Klasse
Wie normale Klassen können Enums eigene Variablen, Methoden und Konstruktoren haben. Konstruktoren dürfen nur den Zugriffsmodifizierer private verwenden, daher können sie nicht von außen aufgerufen werden.
Enums können sowohl konkrete Methoden als auch abstrakte Methoden enthalten. Wenn eine Enum-Klasse abstrakte Methoden hat, muss jede Instanz der Enum-Klasse sie implementieren.
Beispiel
{
RED, GREEN, BLUE;
// Konstruktor
private Color()
{
System.out.println("Constructor called for : " + this.toString());
}
public void colorInfo()
{
System.out.println("Universal Color");
}
}
public class Test
{
// Ausgabe
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
c1.colorInfo();
}
}
Das Ausführen des obigen Codes erzeugt die Ausgabe:
Constructor called for : RED Constructor called for : GREEN Constructor called for : BLUE RED Universal ColorWeitere Erweiterungen