Kotlin 开发 - sealed 关键字

sealed 关键字

1、基本介绍
  1. sealed 用来定义密封类,作用是限制子类的类型

  2. 把类声明为 sealed,它的子类只能定义在同一个文件里

  3. 相当于告诉编译器:可能的子类就这几种,不会再有别的

  4. 配合 when 表达式,可以不用写 else,因为编译器知道所有可能的情况

维度 使用 sealed 关键字 不使用 sealed 关键字
子类位置 只能在同一个文件 任意地方
when 表达式 可以省略 else 需要 else
扩展性 子类集合固定,外部不能新增 外部可以随意新增
2、演示
  1. 使用 sealed 关键字
kotlin 复制代码
sealed class Result
data class Success(val data: String) : Result()
data class Error(val msg: String) : Result()
object Loading : Result()

fun handle(result: Result) = when (result) {
    is Success -> println("数据:${result.data}")
    is Error -> println("错误:${result.msg}")
    Loading -> println("加载中")
}
  1. 不使用 sealed 关键字
kotlin 复制代码
open class Result
data class Success(val data: String) : Result()
data class Error(val msg: String) : Result()
object Loading : Result()

fun handle(result: Result) = when (result) {
    is Success -> println("数据:${result.data}")
    is Error -> println("错误:${result.msg}")
    Loading -> println("加载中")
    else -> println("未知")
}
  1. 不使用 sealed 关键字,如果不写 else,会编译失败
kotlin 复制代码
open class Result
data class Success(val data: String) : Result()
data class Error(val msg: String) : Result()
object Loading : Result()

fun handle(result: Result) = when (result) {
    is Success -> println("数据:${result.data}")
    is Error -> println("错误:${result.msg}")
    Loading -> println("加载中")
}
复制代码
# 输出结果

'when' expression must be exhaustive. Add an 'else' branch.
相关推荐
alexhilton5 小时前
藏在设备上的秘密,终究藏不住
android·kotlin·android jetpack
ai2work10 小时前
ch15 加载模型与初始化上下文
kotlin
hai_android11 小时前
Kotlin / Android 常用函数使用示例手册
android·java·kotlin
hai_android12 小时前
Android MeasureSpec 详解
android·java·kotlin
又见情义13 小时前
RK3568 Android 13 本地 U 盘 OTA 升级实战:基于 RKUpdateService 的完整流程
android
Godikov15 小时前
Android10后台弹窗与APK自动更新
android
ai2work15 小时前
ch11 持久化:DataStore + Gson 多会话
kotlin
又见情义15 小时前
RK3568 Android 13 USB OTG/Host 切换调试经验分享
android
终端安全笔记17 小时前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机
JMchen18 小时前
实战案例:实现120fps流畅的渐变进度条
android·kotlin·canvas