欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

Kotlin 枚举类使用举例

2025年08月14日 Java
一、枚举类核心概念枚举类(enum classes)是 kotlin 中用于定义固定集合值的特殊类。它表示一组命名的常量,每个枚举常量都是该类的单例实例。二、基础语法与特性1. 基本定义enum cl

一、枚举类核心概念

枚举类(enum classes)是 kotlin 中用于定义固定集合值的特殊类。它表示一组命名的常量,每个枚举常量都是该类的单例实例

二、基础语法与特性

1. 基本定义

enum class color {
    red, green, blue
}

2. 带参数的枚举

enum class httpstatus(val code: int, val message: string) {
    ok(200, "success"),
    not_found(404, "resource not found"),
    server_error(500, "internal server error")
}

3. 实现接口

interface printable {
    fun print()
}
enum class loglevel : printable {
    debug {
        override fun print() = println("[debug] detailed info")
    },
    info {
        override fun print() = println("[info] operation log")
    },
    error {
        override fun print() = println("[error] critical issue")
    }
}

4. 内置属性

val color = color.red
println(color.name)    // 输出: red
println(color.ordinal) // 输出: 0 (位置索引)

三、枚举类核心特性

特性说明示例
类型安全编译时检查有效值val color: color = color.red
单例实例每个枚举常量是唯一实例color.red === color.red // true
可携带数据每个常量可拥有独立属性httpstatus.ok.code // 200
可实现接口支持实现接口并提供不同实现loglevel.debug.print()
可定义方法可在枚举类或单个常量中定义方法direction.north.displayname()
迭代能力可通过values()获取所有枚举值color.values().foreach { ... }

四、枚举类使用场景

1. 状态/模式管理

enum class connectionstate {
    disconnected, connecting, connected
}
fun handlestate(state: connectionstate) = when(state) {
    disconnected -> reconnect()
    connecting -> showprogress()
    connected -> startdatatransfer()
}

2. 类型安全配置

enum class imageformat(val extension: string) {
    jpeg(".jpg"), png(".png"), webp(".webp")
}
fun saveimage(format: imageformat) {
    val filename = "image${format.extension}"
    // 保存操作
}

五、枚举类 vs 密封类

特性枚举类密封类
实例类型所有实例相同类型子类可以是不同类型
实例数量固定数量(声明时确定)子类可实例化多次
状态携带常量可带属性但状态固定每个子类可携带不同状态
继承能力不能被子类化可被继承(子类数量有限)
模式匹配支持when穷举支持when穷举+智能转换
适用场景固定值集合(颜色/状态码)有限但可扩展的类型集合(api响应/表达式树)

六、常见问题总结

q:请解释kotlin枚举类及其适用场景?

a

“kotlin枚举类(enum class)是定义固定值集合的特殊类,核心解决三个问题:

1. 类型安全常量管理

  • 替代魔法数字/字符串,如http状态码、错误类型
  • 示例:enum class httpstatus { ok, not_found }

2. 有限选项建模

  • 表示预定义选项集合,如方向、颜色、配置
  • 示例:enum class pizzasize { small, medium, large }

3. 行为差异化实现

  • 通过抽象方法为每个常量提供不同行为
  • 示例策略模式:
enum class operation {
    add { override fun apply(a,b) = a+b },
    multiply { override fun apply(a,b) = a*b }
}

关键优势

  • 编译时安全:杜绝无效值
  • 自描述性:通过名称直接表达含义
  • 功能扩展:支持属性、方法和接口实现

对比密封类

特性枚举类密封类
实例类型同质异构
实例数量固定单例可多实例
状态携带常量级属性子类独立状态

典型应用场景

  • 状态机(如订单状态:created/paid/shipped)
  • 错误代码集中管理
  • 配置选项(如主题:light/dark)
  • 实现策略模式

到此这篇关于kotlin 枚举类的文章就介绍到这了,更多相关kotlin 枚举类内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!