基础定义
密封类是一种特殊的类,用于表示受限的类继承结构 。它的所有子类必须定义在同一个文件中,这使得密封类非常适合用来表示一组有限的状态或类型。
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关键字 |
修饰符可见性 |