0 Tage Serie
java / intermediate
Snippet

Musterabgleich im Switch für den Kontrollfluss in Spring Services

Modernes Java-Switch-Pattern-Matching und geschützte Muster (when-Klauseln) ermöglichen einen prägnanten, erschöpfenden Kontrollfluss über versiegelte Typhierarchien in Spring-Services ohne Typumwandlungen oder verschachtelte if-Anweisungen.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public sealed interface OrderEvent permits OrderCreated, OrderPaid, OrderCancelled {}
public record OrderCreated(String orderId) implements OrderEvent {}
public record OrderPaid(String orderId, double amount) implements OrderEvent {}
public record OrderCancelled(String orderId, String reason) implements OrderEvent {}
@Service
public class OrderWorkflowService {
public String handleEvent(OrderEvent event) {
return switch (event) {
case OrderCreated c -> "Initializing order: " + c.orderId();
case OrderPaid p when p.amount() > 10_000.0 -> "High-value payment received for: " + p.orderId();
case OrderPaid p -> "Standard payment processed for: " + p.orderId();
case OrderCancelled c -> "Order aborted due to: " + c.reason();
};
}
}
spring
Erklärung
1
public sealed interface OrderEvent permits OrderCreated, OrderPaid, OrderCancelled {}
Beschränkt Domänenzustände auf eine geschlossene Menge zulässiger Records.
2
return switch (event) {
Wertet den Kontrollfluss erschöpfend über alle erlaubten Ereignistypen ohne default-Zweig aus.
3
case OrderPaid p when p.amount() > 10_000.0 ->
Wendet eine Bedingung (Pattern Guard) direkt innerhalb der Switch-Kontrollstruktur an.