(Kotlin高级特性三)Kotlin密封类(Sealed Class)在何时比枚举更适用? - 指南

代数数据类型在 Kotlin 中的体现。它们最核心的区别在于:就是密封类和枚举都是用来表示受限类层次结构的利器,它们都子类类型的集合就是枚举是单例实例的集合,而密封类。这个根本区别决定了它们各自的适用场景。”


核心区别:实例 vs. 类型

  • 枚举:定义了一组固定的、可数的常量值。每个枚举常量都是其枚举类的单个实例

    • 例如:enum class Direction { NORTH, SOUTH, EAST, WEST }NORTH 就是 Direction 类型的一个唯一实例。

  • 密封类:定义了一组固定的、可数的子类型。每个子类都可能有多个不同的实例,并且这些实例可以携带不同的状态(数据)。

    • 例如:sealed class Result<out T>,其子类 data class Success<out T>(val data: T)data class Error(val exception: Exception)。你可以有无数个 Success("hello")Success(42) 的实例,它们都是 Success 子类型的实例。

这个“实例与类型”的区别,是解答这个问题的基石。

posted @ 2025-11-16 22:53  gccbuaa  阅读(17)  评论(0)    收藏  举报