Kotlin sealed 关键字介绍

Kotlin sealed 关键字介绍

sealed 是 Kotlin 中的一个重要关键字,用于声明密封类(Sealed Class),它是一种特殊的抽象类,用于表示受限的类层次结构。

基本概念

密封类的主要特点:

  • 所有子类必须在同一文件中声明(Kotlin 1.1 之后可以放宽到同一模块)
  • 密封类本身是抽象的,不能直接实例化
  • 密封类的子类可以有实例(与枚举不同)

基本语法

kotlin 复制代码
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

主要用途

  1. 替代枚举:当需要更复杂的类型时(枚举的每个实例都是相同的类型)
  2. 模式匹配 :与 when 表达式配合使用,可以实现完备的检查
kotlin 复制代码
fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("Success: ${result.data}")
        is Result.Error -> println("Error: ${result.message}")
        Result.Loading -> println("Loading...")
    }
    // 不需要 else 分支,因为所有可能性都已覆盖
}

与枚举的区别

特性 密封类 枚举类
实例类型 可以有多个不同类的实例 所有实例都是同一类型
状态携带 可以携带不同数据 通常不携带数据
继承 支持继承 不支持继承
实例数量 子类可以有任意数量实例 每个枚举值都是单例

与抽象类的区别

  • 密封类的所有子类在编译时已知
  • when 表达式处理密封类时,如果覆盖所有情况则不需要 else 分支
  • 子类必须与密封类在同一模块中

Kotlin 1.5 的改进

Kotlin 1.5 引入了密封接口(Sealed Interface),允许更灵活地构建层次结构:

kotlin 复制代码
sealed interface Error

sealed class IOError : Error {
    // ...
}

实际应用场景

  1. 状态管理(如 UI 状态、网络请求结果)
  2. 表达式树(如编译器中的 AST 节点)
  3. 命令模式中的命令类型
  4. 事件处理系统中的不同事件类型

密封类是 Kotlin 中表达受限类层次结构的强大工具,能够提供更好的类型安全和更清晰的代码结构。

相关推荐
梓仁沐白3 小时前
【Kotlin】协程
开发语言·python·kotlin
WAsbry3 小时前
现代 Android 开发自定义主题实战指南
android·kotlin·material design
梓仁沐白6 小时前
【Kotlin】注解&反射&扩展
开发语言·python·kotlin
移动开发者1号14 小时前
Jetpack Compose瀑布流实现方案
android·kotlin
移动开发者1号14 小时前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·kotlin
移动开发者1号14 小时前
ListView与RecyclerView区别总结
android·kotlin
移动开发者1号14 小时前
OkHttp 3.0源码解析:从设计理念到核心实现
android·kotlin
casual_clover1 天前
Android 之 kotlin语言学习笔记三(Kotlin-Java 互操作)
android·java·kotlin
梓仁沐白1 天前
【Kotlin】数字&字符串&数组&集合
android·开发语言·kotlin
Dola_Pan2 天前
Android四大组件通讯指南:Kotlin版组件茶话会
android·开发语言·kotlin