Java 15带来了密封类的预览功能。现在,我们基于接口的状态机不仅可以防止无效转换,而且可以像枚举一样枚举。
特点是:编译时和运行时两个阶段都能检查状态切换是否合法。
类型检查能自动帮助检查非法状态切换
使用Java编译时的类型检查,如果我们尝试直接从绿色过渡到红色,它将无法编译:
sealed interface TrafficLight |
即使可能进行多个状态转换,我们仍然可以进行类型检查的转换:
static final class Pending implements OrderStatus, BiTransitionTo<CheckingOut, Cancelled> {} |
运行时检查非法状态切换
运行时也可以检查状态切换,如果无法切换,运行时则会抛出异常:
@Test |
某个状态寻找
sealed interface OrderStatus |
提供values(), ordinal(), 和 valueOf()用于寻找状态:
static <T extends State<T>> List<Class> valuesList(Class<T> stateMachineType) { |
更多:on github