Enumerationen sind spezielle Klassen. Sie dienen zum Speichern von konstanten Objekten. Die konstanten Objekte sind von java.lang.Enum abgeleitet und besitzen unter anderem folgende Methoden:
- public final int ordinal() – gibt die Ordinalzahl (eine laufende Nummer, beginnend bei 0) des Enum-Objekts zurück
- public final String name() – gibt den Namen des Enum-Objekts zurück
- public final String toString() – gibt – genauso wie die Methode name() – den Namen des Enum-Objekts zurück
- public final int compareTo(E other) – vergleicht das Enum-Objekt mit einem anderen Enum-Objekt vom Typ E anhand der Ordinalzahl.
Zusätzlich werden vom Compiler für eine Enumeration vom Typ E folgende Methoden generiert:
- public static final E[] values() – gibt ein Array mit allen Enum-Objekten zurück
- public static E valueOf(String s) – gibt das Enum-Objekt mit dem Namen s zurück
In einer Enumeration können eigene Instanzvariablen und Methoden definiert werden.
Eine Enumeration ist ein Aufzählungstyp. Das heißt, ihre Elemente sind geordnet, können also mit der Methode compareTo() verglichen werden. Das Vergleichskriterium ist die Ordinalzahl des Enum-Objekts. Die Ordinalzahl eines Enum-Objekts entspricht – wenn nicht anders definiert – der Position, an der der Name des Objekts in der enum angeführt ist. Im untenstehenden Beispiel hat ROT die Ordinalzahl 0, GRÜN die Ordinalzahl 1 und BLAU die Ordinalzahl 2.
Einfaches Beispiel für eine Enumeration:
enum Farbe { ROT, GRÜN, BLAU } // Verwendung: Farbe f = Farbe.GRÜN; System.out.println(f.ordinal()); // Ausgabe: 1 System.out.println(f.name()); // Ausgabe: GRÜN
Komplexeres Beispiel mit einer Enumeration:
public class EnumTest { enum Wochentag { MONTAG("Mo"), DIENSTAG("Di"), MITTWOCH("Mi"), DONNERSTAG("Do"), FREITAG("Fr"), SAMSTAG("Sa"), SONNTAG("So"); private final String shortName; Wochentag(String shortName) { this.shortName = shortName; } String getShortName() { return shortName; } boolean isWerktag() { return Wochentag.SONNTAG.compareTo(this) != 0; } } public static void main(String[] args) { System.out.println(Wochentag.MITTWOCH.isWerktag()); System.out.println(Wochentag.SONNTAG.isWerktag()); for (Wochentag w : Wochentag.values()) { System.out.printf("%d %-5b %-10s %s\n", w.ordinal(), w.isWerktag(), w.name(), w.getShortName()); } } } // Ausgabe: // // 0 true MONTAG Mo // 1 true DIENSTAG Di // 2 true MITTWOCH Mi // 3 true DONNERSTAG Do // 4 true FREITAG Fr // 5 true SAMSTAG Sa // 6 false SONNTAG So
Die Enum-Objekte von Wochentag haben ein zusätzliches Attribut shortName, das die Kurzbezeichnung des Wochentags speichert. Beim Initialisieren der Enumeration wird für jedes Objekt der Aufzählung der Konstruktor in Zeile 7 mit dem Kurznamen als Argument aufgerufen.
Die Methode isWerktag() vergleicht das Objekt, in dem diese Methode aufgerufen wird, mit dem Objekt SONNTAG. Liefert der Vergleich einen Wert ungleich 0, handelt es sich um einen Werktag. Ansonsten handelt es sich um einen Sonntag.