0Pricing
Java Academy · Lektion

Switch-Ausdrücke mit Enums

Verwenden Sie moderne switch-Ausdrücke mit Enums für übersichtliche und vollständige Verzweigungen.

Switch-Ausdrücke mit Enums ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Switch-Ausdrücke mit Enums

Switch-Ausdrücke (Java 14+) mit Enums ermöglichen eine vollständige, kompakte typbasierte Verzweigung. Wenn alle Enum-Konstanten abgedeckt sind, ist kein default erforderlich.

Traditionelle switch-Anweisung

Die klassische switch-Anweisung funktioniert mit Enums, erfordert aber break, um ein unbeabsichtigtes Weiterlaufen in den nächsten Fall zu verhindern.

enum Severity { LOW, MEDIUM, HIGH, CRITICAL }

Severity s = Severity.HIGH;
String action;
switch (s) {
    case LOW:
        action = "Log and monitor";
        break;
    case MEDIUM:
        action = "Notify on-call team";
        break;
    case HIGH:
        action = "Page engineer immediately";
        break;
    case CRITICAL:
        action = "Activate incident response";
        break;
    default:
        action = "Unknown";
}
System.out.println(action); // Page engineer immediately

Switch-Ausdruck mit Pfeil-Labels

Switch-Ausdrücke mit Pfeil-Labels beseitigen Fallthrough und break. Sie liefern einen Wert und müssen alle Fälle abdecken.

enum Severity { LOW, MEDIUM, HIGH, CRITICAL }

Severity s = Severity.HIGH;
String action = switch (s) {
    case LOW      -> "Log and monitor";
    case MEDIUM   -> "Notify on-call team";
    case HIGH     -> "Page engineer immediately";
    case CRITICAL -> "Activate incident response";
    // no default needed — all cases covered
};
System.out.println(action); // Page engineer immediately

Switch-Ausdruck mit Blöcken

Wenn die Logik eines Falls mehrere Anweisungen erfordert, verwenden Sie einen Block mit yield, um den Ergebniswert zu erzeugen.

enum DayOfWeek { MON, TUE, WED, THU, FRI, SAT, SUN }

DayOfWeek day = DayOfWeek.FRI;
int hoursOpen = switch (day) {
    case MON, TUE, WED, THU -> 8;
    case FRI -> {
        System.out.println("Half day on Friday!");
        yield 4;  // yield returns value from block
    }
    case SAT, SUN -> 0;
};
System.out.println("Hours open: " + hoursOpen); // Hours open: 4

Mehrere Fälle gruppieren

Mehrere Enum-Konstanten können durch eine kommagetrennte Auflistung denselben Fall verwenden.

enum Season { SPRING, SUMMER, FALL, WINTER }

Season season = Season.SUMMER;
String activity = switch (season) {
    case SPRING, FALL -> "Hike in the mountains";
    case SUMMER       -> "Beach vacation";
    case WINTER       -> "Ski at the resort";
};
System.out.println(activity); // Beach vacation

Aus Methoden mit Switch zurückgeben

Switch-Ausdrücke eignen sich hervorragend als Rückgabeausdrücke in Methoden und machen die Absicht klar erkennbar.

enum Priority { LOW, NORMAL, HIGH, URGENT }

static int getSlaHours(Priority p) {
    return switch (p) {
        case LOW    -> 72;
        case NORMAL -> 24;
        case HIGH   -> 4;
        case URGENT -> 1;
    };
}

System.out.println(getSlaHours(Priority.URGENT)); // 1
System.out.println(getSlaHours(Priority.LOW));    // 72

Switch-Ausdruck in einem Stream

Switch-Ausdrücke können innerhalb von Stream-Operationen für übersichtliche Transformationen pro Element verwendet werden.

import java.util.*;
import java.util.stream.*;

enum Status { PENDING, ACTIVE, CLOSED }

record Account(String id, Status status) {}

List<Account> accounts = List.of(
    new Account("A1", Status.ACTIVE),
    new Account("A2", Status.PENDING),
    new Account("A3", Status.CLOSED)
);

accounts.stream()
    .map(a -> a.id() + ": " + switch (a.status()) {
        case ACTIVE  -> "\u2705 Live";
        case PENDING -> "\u23f3 Awaiting activation";
        case CLOSED  -> "\u274c Deactivated";
    })
    .forEach(System.out::println);

Vollständigkeitsprüfung zur Compile-Zeit

Der Compiler stellt sicher, dass alle Enum-Konstanten abgedeckt sind. Wenn Sie einer Enum eine neue Konstante hinzufügen, führt dies in allen Switch-Ausdrücken, die sie nicht behandeln, zu Kompilierungsfehlern.

enum Color { RED, GREEN, BLUE }  // add YELLOW here → compile error below

Color c = Color.GREEN;
// This switch is exhaustive for RED, GREEN, BLUE
// If you add YELLOW to the enum without adding a case here,
// the compiler will report an error.
String hex = switch (c) {
    case RED   -> "#FF0000";
    case GREEN -> "#00FF00";
    case BLUE  -> "#0000FF";
};
System.out.println(hex); // #00FF00

Switch mit default zur Sicherheit

Wenn Sie eine Switch-Anweisung (keinen Ausdruck) verwenden oder der Switch absichtlich nur einige Fälle abdeckt, fügen Sie einen default-Fall hinzu.

enum Feature { DARK_MODE, PUSH_NOTIFICATIONS, ANALYTICS, BETA_FEATURE }

static boolean isEnabled(Feature feature) {
    return switch (feature) {
        case DARK_MODE, PUSH_NOTIFICATIONS -> true;
        case ANALYTICS                     -> false;
        default -> {
            System.out.println("Unknown feature: " + feature);
            yield false;
        }
    };
}
System.out.println(isEnabled(Feature.DARK_MODE));     // true
System.out.println(isEnabled(Feature.BETA_FEATURE));  // false

Praxis: Lebenszyklus einer Bestellung

Eine vollständige Zustandsmaschine für den Lebenszyklus einer Bestellung, die mithilfe eines Switch-Ausdrucks zulässige Übergänge bestimmt.

enum OrderState { CART, PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED }

static Set<OrderState> allowedTransitions(OrderState from) {
    return switch (from) {
        case CART      -> Set.of(OrderState.PENDING, OrderState.CANCELLED);
        case PENDING   -> Set.of(OrderState.CONFIRMED, OrderState.CANCELLED);
        case CONFIRMED -> Set.of(OrderState.SHIPPED);
        case SHIPPED   -> Set.of(OrderState.DELIVERED);
        case DELIVERED, CANCELLED -> Set.of(); // terminal states
    };
}
System.out.println(allowedTransitions(OrderState.PENDING));
// [CONFIRMED, CANCELLED]

Switch mit String vs. Enum

Ein Switch über einen String erfordert eine Nullprüfung und unterscheidet zwischen Groß- und Kleinschreibung. Ein Switch über ein Enum ist typsicher, aber nicht null-sicher (bei null tritt eine NPE auf) – bevorzugen Sie Enums, wenn die Wertemenge bekannt ist.

// String switch — fragile
String role = "admin";
String label = switch (role.toLowerCase()) {
    case "admin" -> "Administrator";
    case "guest" -> "Guest User";
    default      -> "Unknown";
};

// Enum switch — type-safe
enum Role { ADMIN, GUEST }
Role r = Role.ADMIN;
String label2 = switch (r) {
    case ADMIN -> "Administrator";
    case GUEST -> "Guest User";
};
System.out.println(label2); // Administrator

Kurztest

Sie haben eine Enum mit 4 Konstanten und schreiben einen Switch-Ausdruck, der alle 4 abdeckt. Was geschieht, wenn Sie der Enum eine 5. Konstante hinzufügen?

Zusammenfassung: Switch-Ausdrücke mit Enums

Die wichtigsten Erkenntnisse:

  • Switch-Ausdrücke mit Pfeil-Labels machen break und Fall-through überflüssig
  • Verwenden Sie yield, um aus einem Block-Fall einen Wert zurückzugeben
  • Gruppieren Sie mehrere Konstanten mit Kommas: case A, B ->
  • Vollständige Switch-Ausdrücke benötigen kein default, wenn alle Konstanten abgedeckt sind
  • Das Hinzufügen einer neuen Enum-Konstante führt in vollständigen Switch-Ausdrücken zu Kompilierungsfehlern
  • Switch-Ausdrücke eignen sich hervorragend für map()-Operationen in Streams

Häufig gestellte Fragen

Ist die Lektion „Switch-Ausdrücke mit Enums“ kostenlos?

Ja — der vollständige Text von „Switch-Ausdrücke mit Enums“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Switch-Ausdrücke mit Enums“?

Verwenden Sie moderne switch-Ausdrücke mit Enums für übersichtliche und vollständige Verzweigungen. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Switch-Ausdrücke mit Enums“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Enums definieren und verwenden
  2. Enums mit Feldern und Methoden
  3. Switch-Ausdrücke mit Enums
  4. EnumSet und EnumMap
← Zurück zu Java Academy