ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

第068篇 sealed class:状态建模的利器

第068篇 sealed class:状态建模的利器 sealed class在 Kotlin 里的地位,相当于"用类型系统表达状态机"。它的价值不在语法,而在一个很实际的痛点:当一个值有多种可能形态时,怎么保证"处理了这几种形态"这件事不会漏。面试里问 sealed class,问的往往不是"是什么",而是"你用它解决过什么建模问题"和"它和枚举、when表达式的关系"。先把结论放在前面:sealed class(1.5 起可写sealed interface) restricts 子类必须与父类同一文件内声明(1.5 后放宽到同一包/模块的编译单元),这让子类型集合是封闭且可穷举的。于是when表达式在 Kotlin 里被当作表达式处理——编译器知道所有分支,漏一个就编译报错,同时when有返回值。 核心用途是显式建模互斥状态,替代"多个可空字段 + 若干布尔标记"这种做法。机制拆解先说实现机制。sealed类在字节码层面是abstract类加一个PermittedSubclasses属性(JVM 的 sealed 类特性),子类编译后带上sealed标记。 运行时子类集合是可枚举的,所以 Kotlin 编译器才能在when里做穷举性检查——如果一个when
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进