密封接口驱动有限状态机:编译期穷举检查
利用 sealed interface 实现复杂状态机,利用 when 的穷举特性在编译期捕获未处理的状态转换,替代传统枚举或抽象类。 · 难度:入门 · +10XP
密封接口驱动有限状态机
sealed interface 比 sealed class 更灵活,允许多个接口继承。本教程以网络连接状态机为例(Disconnected, Connecting, Connected, Failed),展示如何通过 sealed interface 定义状态原子,利用 when 表达式强制处理所有分支。进一步引入状态转换矩阵,借助 Kotlin 的密封层次保证新增状态时必须更新所有转换逻辑,避免运行时遗漏。
sealed interface ConnectionState
object Disconnected : ConnectionState
object Connecting : ConnectionState
data class Connected(val sessionId: String) : ConnectionState
data class Failed(val error: Throwable) : ConnectionState
fun handleState(state: ConnectionState) = when(state) {
is Disconnected -> reconnect()
is Connecting -> showSpinner()
is Connected -> navigateToDashboard(state.sessionId)
is Failed -> showError(state.error)
}