密封类(Sealed Class)

20 阅读1分钟

基础定义

密封类是一种特殊的类,用于表示受限的类继承结构 。它的所有子类必须定义在同一个文件中,这使得密封类非常适合用来表示一组有限的状态或类型。

  1. sealed class 通常是一个抽象类,表示一组有限的状态或类型。
// Result.kt

// 密封类
sealed class Result
// 有限的状态
data class Success(val data: Any) : Result()
data class Failure(val error: String) : Result()

// 处理状态
fun processResult(result: Result) = when (result) {
    is Success -> println("Success: ${result.data}")
    is Failure -> println("Failure: ${result.error}")
}

fun main() {
    val successResult = Success("Success Data")
    val failureResult = Failure("Failure Error")

    processResult(successResult)
    processResult(failureResult)
}

编译器提示

  1. 编译器知道 Result 的所有子类是 SuccessError,因此不需要 else 分支。
  2. 如果未来添加了新的子类,编译器会提醒你需要更新 when 表达式。

image.png

扩展

标题
data关键字
修饰符可见性