查看: 53|回覆: 0

[教程] Kotlin 枚举类使用举例

[複製鏈接]

6

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-11-6
發表於 2025-8-14 11:31:54 | 顯示全部樓層 |閲讀模式

一、枚举类核心概念

枚举类(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 枚举类内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!

您可能感兴趣的文章:
  • 深入学习Kotlin 枚举的简洁又高效进阶用法
  • Kotlin的枚举与异常示例详解
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部