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.
相关推荐
杉氧10 小时前
React 灵魂:深入剖析 Hooks 与副作用(Side Effects)陷阱
android·前端·react native
2601_9620710011 小时前
【Java EE】SpringBoot的创建与简单使用
spring boot·后端·java-ee
又见情义11 小时前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发
用户09340777351411 小时前
HarmonyOS WPS Open SDK 实践:registerApp 鉴权与就绪门禁
android·typescript·harmonyos
jike_202611 小时前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别
always_TT12 小时前
【Python 字符串格式化:format() 方法】
android·开发语言·python
恋猫de小郭13 小时前
AI 时代,一个优化 Flutter 的重复代码工具 Deslop
android·前端·flutter
RisunJan13 小时前
Android 面试知识点整理
android·面试·职场和发展
木井巳13 小时前
【JavaEE】Spring Web MVC 入门
java·spring boot·spring·servlet·java-ee
脚踏实地,坚持不懈!13 小时前
Android ANR 内核底层全解析:从一次触摸到“应用无响应”
android·linux