Enum (Aufzählungstyp)
Kurz: Ein Datentyp, der aus einer festen, vorher definierten Menge benannter Konstanten besteht — z. B. die Wochentage oder die Himmelsrichtungen, bei denen es nur genau diese begrenzten, bekannten Werte geben kann.
Genauer: Statt beliebige Zahlen oder Zeichenketten zu verwenden, um einen begrenzten Zustand darzustellen (z. B. 1 für Montag), macht ein Enum die gültigen Werte explizit und für den Compiler prüfbar — ein ungültiger Wert wie 8 für einen Wochentag ist so gar nicht erst möglich. Das macht Code lesbarer und weniger fehleranfällig als lose Zahlen- oder String-Konstanten.
Im Detail
Der Kontrast macht den Vorteil deutlich:
// OHNE Enum: "magische Zahlen" ohne Kontext, Tippfehler bleiben unbemerkt
status = 2 // was bedeutet 2? muss man im Code nachschlagen
// MIT Enum: selbsterklärend, ungültige Werte sind unmöglich
status = Status.AKTIVBei losen Zahlen oder Strings kann JEDER beliebige Wert zugewiesen werden — ein Tippfehler ("aktiv" statt "aktiv " mit Leerzeichen) oder eine falsche Zahl fällt oft erst zur Laufzeit auf, wenn ein Vergleich unerwartet fehlschlägt. Bei einem Enum prüft der Compiler bereits beim Kompilieren, ob nur einer der definierten Werte verwendet wird — ein Tippfehler wird sofort als Fehler angezeigt, nicht erst als mysteriöses Laufzeitverhalten.
enum Wochentag { MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG }
Wochentag heute = Wochentag.MONTAG;Ein weiterer wichtiger Vorteil zeigt sich beim Switch-Statement: Viele moderne Compiler können bei einem Switch über einen Enum-Wert warnen (oder sogar einen Fehler ausgeben), wenn nicht ALLE möglichen Enum-Werte behandelt werden — kommt später ein neuer Wert zum Enum hinzu, macht der Compiler automatisch auf alle Stellen im Code aufmerksam, die diesen neuen Fall noch nicht berücksichtigen. Das wäre bei losen String- oder Zahlenkonstanten unmöglich, weil der Compiler nicht weiß, welche Werte überhaupt “alle möglichen” sind.
In vielen Sprachen sind Enum-Werte intern nicht nur einfache Konstanten, sondern vollwertige Objekte — in Java kann ein Enum sogar eigene Felder und Methoden besitzen, sodass z. B. jeder Wochentag zusätzlich speichern kann, ob er ein Wochenendtag ist. Das macht Enums zu einem mächtigeren Werkzeug als reine “benannte Zahlen”, auch wenn der Kernanwendungsfall — eine feste, geschlossene Menge gültiger Zustände — derselbe bleibt.
Siehe auch: Non-primitive Types