Skip to content
配图

密封类与穷尽 when

kotlin
sealed interface Result<out T> {
    data class Ok<T>(val value: T) : Result<T>
    data class Err(val cause: Throwable) : Result<Nothing>
}

fun <T> Result<T>.fold(onOk: (T) -> Unit, onErr: (Throwable) -> Unit) = when (this) {
    is Result.Ok -> onOk(value)
    is Result.Err -> onErr(cause)
}

编译器保证分支穷尽,重构新增子类时编译器会逼你改全 when

这与 Swift enum、Rust enum 同族,是把状态机写进类型的正道。

Visitors · Page views