Switch-expressies met enums
Gebruik moderne switch-expressies met enums voor overzichtelijke, volledige vertakkingen.
Switch-expressies met enums is een gratis Java Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.
Switch-expressies met enumeraties
Switch-expressies (Java 14+) met enumeraties bieden volledige en beknopte routering op basis van typen. Wanneer alle enumeratieconstanten zijn afgedekt, is default niet nodig.
Traditionele switch-instructie
De klassieke switch-instructie werkt met enumeraties, maar vereist break om ongewenst doorvallen te voorkomen.
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 immediatelySwitch-expressie met pijl-labels
Switch-expressies met pijl-labels voorkomen doorvallen en maken break overbodig. Ze evalueren naar een waarde en moeten volledig zijn.
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 immediatelySwitch-expressie met blokken
Wanneer de logica van een case meerdere instructies vereist, gebruik je een blok met yield om de resultaatwaarde te produceren.
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: 4Meerdere gevallen groeperen
Meerdere enumconstanten kunnen hetzelfde geval delen door ze met komma's te scheiden.
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 vacationTerugkeren uit methoden met switch
Switch-expressies zijn uitstekend geschikt als return-instructies in methoden en maken de bedoeling duidelijk.
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)); // 72Switch-expressie in een stream
Switch-expressies kunnen binnen streambewerkingen worden gebruikt voor overzichtelijke transformaties per element.
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);Volledigheid tijdens het compileren
De compiler controleert of alle enumconstanten worden behandeld. Als je een nieuwe constante aan een enum toevoegt, ontstaan er compileerfouten in alle switch-expressies die deze niet afhandelen.
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); // #00FF00Switch met default voor veiligheid
Gebruik een switch-instructie (geen expressie) of behandelt de switch bewust slechts enkele gevallen? Voeg dan een default-geval toe.
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)); // falsePraktisch: levenscyclus van een bestelling
Een volledige toestandsmachine voor de levenscyclus van een bestelling, waarbij een switch-expressie bepaalt welke overgangen zijn toegestaan.
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 op String versus enum
Schakelen op een String vereist een nullcontrole en is hoofdlettergevoelig. Schakelen op een enum is nullveilig (NPE bij null) en typeveilig — geef de voorkeur aan enums wanneer de verzameling waarden bekend is.
// 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); // AdministratorSnelle controle
Je hebt een enum met 4 constanten en schrijft een switch-expressie die alle 4 behandelt. Wat gebeurt er als je een 5e constante aan de enum toevoegt?
Samenvatting: switch-expressies met enums
Belangrijkste punten:
- Switch-expressies met pijllabels elimineren break en het doorvallen naar volgende gevallen
- Gebruik yield om een waarde uit een blokgeval terug te geven
- Groepeer meerdere constanten met komma's: case A, B ->
- Volledige switch-expressies hebben geen default nodig wanneer alle constanten worden behandeld
- Het toevoegen van een nieuwe enumconstante veroorzaakt compileerfouten in volledige switch-expressies
- Switch-expressies zijn zeer geschikt voor map()-bewerkingen op streams
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “Switch-expressies met enums” gratis?
Ja — de volledige tekst van “Switch-expressies met enums” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.
Wat leer ik in “Switch-expressies met enums”?
Gebruik moderne switch-expressies met enums voor overzichtelijke, volledige vertakkingen. Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Switch-expressies met enums”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Enums definiëren en gebruiken
- Enums met velden en methoden
- Switch-expressies met enums
- EnumSet en EnumMap