Real World Example

Order Status Events (Swiggy / Zomato style)

Order tracking is a stream of events: placed, accepted by restaurant, picked up, delivered, cancelled. A sealed interface of records models the events; a pattern-matching switch turns them into the text shown in the app — and the compiler guarantees every event type is handled.

Example

import java.util.*;

public class Main {
    static String toMessage(OrderEvent e) {
        return switch (e) {
            case Placed(var id, var amount) when amount >= 1000 -> "Order " + id + " placed. You earned free delivery!";
            case Placed(var id, var amount) -> "Order " + id + " placed (Rs " + amount + ")";
            case Accepted(var id, var restaurant, var mins) -> restaurant + " is preparing " + id + ", ready in " + mins + " min";
            case PickedUp(var id, Rider(var name, var phone)) -> name + " picked up " + id + ". Call: " + phone;
            case Delivered(var id) -> id + " delivered. Rate your meal!";
            case Cancelled(var id, var reason) -> id + " cancelled: " + reason;
        };
    }

    public static void main(String[] args) {
        List<OrderEvent> timeline = List.of(
                new Placed("SW-501", 1240),
                new Accepted("SW-501", "Meghana Foods", 15),
                new PickedUp("SW-501", new Rider("Imran", "98xxxxxx21")),
                new Delivered("SW-501"),
                new Placed("SW-502", 180),
                new Cancelled("SW-502", "restaurant closed"));
        timeline.forEach(e -> System.out.println(toMessage(e)));
    }
}

record Rider(String name, String phone) {}
sealed interface OrderEvent permits Placed, Accepted, PickedUp, Delivered, Cancelled {}
record Placed(String orderId, int amount) implements OrderEvent {}
record Accepted(String orderId, String restaurant, int prepMinutes) implements OrderEvent {}
record PickedUp(String orderId, Rider rider) implements OrderEvent {}
record Delivered(String orderId) implements OrderEvent {}
record Cancelled(String orderId, String reason) implements OrderEvent {}

Output

Order SW-501 placed. You earned free delivery!
Meghana Foods is preparing SW-501, ready in 15 min
Imran picked up SW-501. Call: 98xxxxxx21
SW-501 delivered. Rate your meal!
Order SW-502 placed (Rs 180)
SW-502 cancelled: restaurant closed