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.
相关推荐
Digitally3 小时前
5 种简单方法:如何将华为手机照片传输到 Mac 电脑
android
qq_4523962314 小时前
第十篇:《自动化处理验证码:OCR、接口绕过与第三方服务》
android·自动化·ocr
a8a30215 小时前
Laravel 10.x核心特性深度解析
android
angerdream17 小时前
Android手把手编写儿童手机远程监控App之UUID
android
dalancon17 小时前
Android OomAdjuster流程
android
河婆墟邓紫棋17 小时前
MIUI中的权限
android·github
我命由我1234518 小时前
Java 开发 - CountDownLatch 不需要手动关闭
android·java·开发语言·jvm·kotlin·android studio·android-studio
众少成多积小致巨18 小时前
GNU Make 核心指南
android·c++
凛_Lin~~18 小时前
安卓进程保活方案记录(双重fork+文件锁+手搓parcel)
android·安卓