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 中表达受限类层次结构的强大工具,能够提供更好的类型安全和更清晰的代码结构。

相关推荐
日光明媚38 分钟前
一步生成视频!One-Forcing:DMD + 零成本 GAN,训练 200 步超越多步 SOTA
android·开发语言·kotlin
plainGeekDev2 小时前
Android运行时面试题:ART和JVM的区别都搞不清,别写精通了
jvm·面试·kotlin
Refrain_zc1 天前
Android Kotlin + MVVM:基于 LiveData 的段落列表音频播放与 AB 复读实现
kotlin
赏金术士1 天前
企业级 Jetpack Compose 项目(入门版)最佳结构
android·kotlin·compose
我是唐青枫1 天前
Kotlin Lambda 表达式详解:从基础语法到实战封装
开发语言·kotlin
Kapaseker1 天前
Kotlin 的扩展没有你看上去的那么简单
android·kotlin
黄林晴1 天前
告别 KMP 选型地狱!klibs.io 上线,全平台库一键筛选太省心
android·kotlin
吕氏春秋i2 天前
android kotlin Compose 蓝牙库推荐
android·gitee·kotlin
鹏晨互联2 天前
《Kotlin高阶函数完全指南:从入门到精通的15个核心函数》
android·开发语言·kotlin
android_cai_niao2 天前
快速删除集合中的元素
kotlin·removeif