Enumerations
Enumerations sind neu in Java 1.5 und werden von den älteren Arbeitsumgebungen möglicherweise nicht korrekt erkannt. Sie dienen dazu, auf zuverlässige Art Gruppen von Konstanten zu definieren. Ein Beispiel:
Nehmen wir an, wir wollten bestimmte Musikstücke den Jahreszeiten zuordnen und wollten daher dieJahreszeiten als Konstanten definieren. Da es keinen Datentyp „Jahreszeit" gibt, kämen grundsätzlich eine Reihe von Datentypen in Frage. Eine naheliegende Lösung wäre vielleicht, die Jahreszeit als Integer-Wert zu behandeln:
final int SPRING=1;
final int SUMMER=2;
final int AUTUMN=3;
final int WINTER=4;
final int SEASONS=new int[] {SPRING, SUMMER, AUTUMN, WINTER};
Das funktioniert erstmal, hat aber eine Reihe von Nachteilen:
- Niemand hindert mich daran, hier eine fünfte, sechste oder wievielte Jahreszeit einzufügen. Wir werden eine Menge Code brauchen, um solche Fehler abzufangen. Es gibt beim Kompilieren keine Sicherheit, dass ein Wert zulässig ist.
- Wenn ich eine Jahreszeit ausdrucke, sehe ich eine Zahl, das ist wenig aussagekräftig.
- Die Zuordnung von Zahlen zu realen Ereignissen kann leicht zu Verwirrung führen. Das gibt es bereits in der Java-Api. Während dem ersten Tag eines Monats irgendwie nachvollziehbar mit 1 beginnt, ist es bei den Monaten im Jahr anders: hier ist der Januar der nullte Monat und der Dezember der elfte, wie es sich für ein Array gehört, das ja mit dem Index "0" beginnt. Ein steter Quell schwer zu findender Fehler.
Mit Java 1. 5 können wir nun eine Enumeration definierten, die einen eigenen Typ erzeugt:
enum Season {SPRING,SUMMER, AUTUMN, WINTER};
Eine Season kann nun genau einen dieser Werte annehmen und keine weiteren. Beim Ausdrucken sehen wir die definierten Werte, also beispielsweise: „SPRING" bei System.out.println(SPRING);
Eine Enumeration kann aber noch mehr. So kann sie auch Daten und Methoden anbieten, die am jeweiligen Objekt aufgerufen werden können.
Enumerations werden leider von der Beanshell noch nicht unterstützt, das Beispiel läuft nicht im Applet.
Insgesamt ein sehr nützlicher neuer Typ.
Aufgabe SwitchEnumeration
Wenden Sie ein switch – case statement auf eine Enumeration an.
Musterlösung: java1.aufg.kap_3.SwitchEnumeration