4.13.2 | Darstellung von Aufzählungstypen mit geschachtelten Klassen |
Java kennt keine Aufzählungstypen, wie sie von Sprachen wie C bekannt sind. Die folgende Zeile definiert einen Aufzählungstyp farbe in C:enum farbe {rot, gelb, gruen};In Java gibt es für derartige Definitionen zwei Möglichkeiten. Die erste Alternative besteht in der Definition von Konstanten nach folgendem Muster:public class Ampel { int farbe; public static final int ROT = 0; public static final int GELB = 1; public static final int GRUEN = 2; }Dieses Muster findet zwar häufig Anwendung, hat aber den Nachteil, dass nicht ausgeschlossen werden kann, dass an farbe auch Werte zugewiesen werden, die nicht einer der Konstanten entsprechen. Genau dieses Problem besteht bei der zweiten Alternative, der Verwendung geschachtelter Klassen nicht. In diesem Fall hätte das obige Beispiel folgende Gestalt:public class Ampel { Farbe farbe; public static final class Farbe { // Erzeugung weiterer Exemplare verhindern private Farbe() {} // Definition von Objekt-Konstanten public static final Farbe ROT = new Farbe(); public static final Farbe GELB = new Farbe(); public static final Farbe GRUEN = new Farbe(); } }Bei dieser Technik wird eine geschachtelte Top-Level-Klasse für die vorgesehenen Werte definiert. Anstelle von int-Konstanten wird jeder mögliche Wert durch ein eigenes Exemplar dieser Klasse dargestellt. Zusätzlich sollte ein leerer privater Konstruktor definiert werden, damit andere Klassen keine neuen Exemplare erzeugen können. Auf diese Weise kann bereits der Compiler sicherstellen, dass wirklich nur die vorgesehenen Werte benutzt werden.