基础定义
密封类是一种特殊的类,用于表示受限的类继承结构 。它的所有子类必须定义在同一个文件中,这使得密封类非常适合用来表示一组有限的状态或类型。
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)
}
编译器提示
- 编译器知道
Result的所有子类是Success和Error,因此不需要else分支。 - 如果未来添加了新的子类,编译器会提醒你需要更新
when表达式。
扩展
| 标题 |
|---|
| data关键字 |
| 修饰符可见性 |