Type safe Java içindir
Örnek
Şöyle bir kod olsun
sealed interface OrderState
permits Unpaid, Paid, Shipped {
}
record Unpaid() implements OrderState {}
record Paid() implements OrderState {}
record Shipped() implements OrderState {}
Order şöyle olsun
record Order<S extends OrderState>(
String id
) {
}
Factory ve transition şöyle olsun
static Order<Unpaid> newOrder(String id) {
return new Order<>(id);
}
static Order<Paid> pay(Order<Unpaid> order) {
return new Order<>(order.id());
}
static Order<Shipped> ship(Order<Paid> order) {
return new Order<>(order.id());
}
Artık API şöyle
Order<Shipped> ship(Order<Paid> order)