Kurzeinstieg Java: Aufzählungstypen

Was sind Aufzählungstypen?

Bearbeiten

Mit Aufzählungstypen werden Sammlungen von Konstanten bezeichnet. Eine Variable kann nur Werte aus einer aufzählbaren Menge an vorbelegten Konstanten annehmen. Java kennt dafür ein eigenes Schlüsselwort, nämlich enum. Und so sieht es aus:

enum MintFakultaeten {
    MATHEMATIK,
    CHEMIE,
    BIOLOGIE,
    PHYSIK,
    ELEKTROTECHNIK,
    MASCHINENBAU
}

public class EnumTest {
    public static void main(String[] args) {
        MintFakultaeten fakultaet = MintFakultaeten.MATHEMATIK;        
        System.out.println(fakultaet);
    }
}

Variablen kann eine Konstante aus der Menge zugewiesen werden, es wird immer der Typname (MintFakultaeten im obigen Beispiel) der Konstanten vorangestellt. Aufzählungen bilden eine Subklasse von 'java.lang.Enum' und erben damit die Methode toString() von Object. Falls Sie je über die Menge der Konstanten iterieren müssen, probieren Sie es doch mit folgendem Code:

for(MintFakultaeten fak :  MintFakultaeten.values()) {
            System.out.println(fak + " " + fak.ordinal() );
}

Die Dokumentation zu values() zu finden ist übrigens nicht ganz leicht. Ansonsten können Sie mit ordinal() eine Konstante in eine Zahl umwandeln.

Wie werden Aufzählungen erweitert?

Bearbeiten

Einfache Aufzählungen, wie im letzten Abschnitt gezeigt, bestehen aus Konstanten, die einen Zahlenwert repräsentieren. Konstante Einheiten bestehen aber in der Realwelt zumeist aus deutlich mehr Informationen, ein konstantes Buch etwa aus der Seitenzahl, dem Autor und einer ISBN und eine konstante Fakultät besteht etwa aus einem Dekan und den Studierenden. So etwas zu modellieren ist mit enum ebenfalls möglich:

enum Fakultaet {
    // Fakultäten, Dekan, Anzahl Studierender
    MATHEMATIK("Herr Meyer", 7000),
    PHYSIK("Frau Schulze", 1000),
    CHEMIE("Frau Özdal", 14000);

    // Konstanten durch Konstruktor initialisiert
    final String DEKAN;
    final int ANZAHL_STUDIERENDE;

    // Konstruktor
    private Fakultaet(String dekan, int anzahlStudierende) {
        DEKAN = dekan;
        ANZAHL_STUDIERENDE = anzahlStudierende;
    }
}


class EnumTest
{
    public static void main(String[] args) {
        Fakultaet f = Fakultaet.MATHEMATIK;
        System.out.println(f + " wird vertreten durch " + f.DEKAN + " und hat " + f.ANZAHL_STUDIERENDE  + " Studierende.");
        System.out.println("Wir haben folgende Fakultäten:");
        for(Fakultaet c : Fakultaet.values()) {
            System.out.println(" -> " + c );
        }
    }
}

Die Fakultäten bestehen aus einer kleinen Menge von Konstanten. Zu jeder Konstanten gehören weitere Angaben. Der Konstruktor, der vom Programmierer nicht selber aufgerufen werden kann, baut aus diesen Angaben die enum-Konstanten für die Fakultäten (MATHEMATIK, …). Die Konstanten der Fakultäten müssen ganz oben in der Klasse stehen, der Konstruktor muss private oder packet-private deklariert werden.

Und sonst?

Bearbeiten

Besuchen Sie doch einmal die Klasse 'java.lang.Enum' in der Originaldokumentation. Dort werden weitere Klassen beschrieben, die die Möglichkeiten der hier vorgestellten enums erweitern.