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.
相关推荐
YM52e6 小时前
鸿蒙Flutter Center居中组件:Align对齐详解
android·学习·flutter·华为·harmonyos·鸿蒙
时间的拾荒人7 小时前
MySQL 视图详解
android·数据库·mysql
祉猷并茂,雯华若锦7 小时前
Appium 3.x安卓按键与通知栏操作全指南
android·appium
木易士心8 小时前
Jetpack Compose 深度解析:初始组合与重组的底层奥秘
android jetpack
码农coding8 小时前
android 12 SurfaceFlinger开机启动分析
android
hunterandroid8 小时前
Paging 3 RemoteMediator 实战:构建离线优先的分页列表
android·前端
码农coding8 小时前
android12 开机启动PMS
android
Days20508 小时前
GPT-Image-2 国风美学人设生成提示词分享
android·gpt
浮江雾9 小时前
Flutter第十节-----Flutter布局与组件全解析
android·开发语言·前端·学习·flutter·入门
captain3769 小时前
创建多线程程序
java·java-ee