Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


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.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.