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.
相关推荐
mmsx15 分钟前
Android 测绘数值基础:测量单位系统与七四参数、高程拟合
android
郑州光合科技余经理23 分钟前
出海外卖平台:支付对接为什么要和下单收款分开
android·java·开发语言·前端·后端·php·ai编程
夜雪一千24 分钟前
MySQL 如何提高查询速度:从索引、SQL、表结构到实战调优
android·sql·mysql
终端安全笔记42 分钟前
配置锁状态那一栏查的是什么:报告里几项各自指向什么风险
android·前端·安全·ios
恋猫de小郭1 小时前
Kotlin Toolchain 0.13,JetBrains 推荐 KMP 都切换到到全新工具链
android·前端·flutter
安卓机器1 小时前
rom定制系列------小米8 安卓16线刷原生固件 体验新版本
android·小米8安卓16
cyy2981 小时前
小米电视安装tts引擎
android·tv
小锋学长生活大爆炸2 小时前
【工具】在 Android 手机上运行 Docker
android·docker·智能手机
Carson带你学Android2 小时前
OpenAI Dots 登陆手机端:手机上派任务,AI 在云端写代码
android·ios
从琳开始9892 小时前
[JavaEE]多线程初阶(下篇)------多线程案例(单例模式,阻塞队列,线程池,定时器)
java·单例模式·java-ee