Kotlin枚举类
外观
Kotlin枚举类[编辑 | 编辑源代码]
枚举类(Enum Class)是Kotlin中一种特殊的类,用于表示一组固定的常量。枚举类通过列举所有可能的取值来定义类型,使得代码更加清晰、类型安全且易于维护。枚举类常用于表示状态、方向、颜色等有限集合的场景。
基本语法[编辑 | 编辑源代码]
Kotlin中使用enum
关键字定义枚举类,每个枚举常量都是枚举类的实例,用逗号分隔。枚举类可以包含属性、方法和构造函数。
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
上述代码定义了一个名为Direction
的枚举类,包含四个常量:NORTH
、SOUTH
、EAST
和WEST
。
访问枚举常量[编辑 | 编辑源代码]
枚举常量可以通过类名直接访问:
fun main() {
val direction = Direction.NORTH
println(direction) // 输出: NORTH
}
枚举类的属性和方法[编辑 | 编辑源代码]
枚举类可以像普通类一样定义属性和方法。每个枚举常量可以有自己的属性值,并通过构造函数初始化。
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
fun main() {
val color = Color.RED
println("${color.name} 的RGB值是 ${color.rgb.toString(16)}") // 输出: RED 的RGB值是 ff0000
}
定义方法[编辑 | 编辑源代码]
枚举类可以定义方法,包括抽象方法。每个枚举常量可以覆盖这些方法:
enum class Operation {
ADD {
override fun apply(x: Int, y: Int) = x + y
},
SUBTRACT {
override fun apply(x: Int, y: Int) = x - y
};
abstract fun apply(x: Int, y: Int): Int
}
fun main() {
println(Operation.ADD.apply(5, 3)) // 输出: 8
println(Operation.SUBTRACT.apply(5, 3)) // 输出: 2
}
枚举类的实用功能[编辑 | 编辑源代码]
Kotlin枚举类提供了一些内置属性和方法:
name
:获取枚举常量的名称(字符串)。ordinal
:获取枚举常量的序号(从0开始)。values()
:获取所有枚举常量的数组。valueOf()
:根据名称获取枚举常量。
enum class Weekday {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
fun main() {
val days = Weekday.values()
days.forEach { println("${it.name} 的序号是 ${it.ordinal}") }
val day = Weekday.valueOf("FRIDAY")
println(day) // 输出: FRIDAY
}
实际应用案例[编辑 | 编辑源代码]
状态管理[编辑 | 编辑源代码]
枚举类常用于表示有限的状态,例如订单状态:
enum class OrderStatus {
CREATED, PROCESSING, SHIPPED, DELIVERED, CANCELLED
}
fun updateOrder(status: OrderStatus) {
when (status) {
OrderStatus.CREATED -> println("订单已创建")
OrderStatus.PROCESSING -> println("订单处理中")
OrderStatus.SHIPPED -> println("订单已发货")
OrderStatus.DELIVERED -> println("订单已送达")
OrderStatus.CANCELLED -> println("订单已取消")
}
}
fun main() {
updateOrder(OrderStatus.SHIPPED) // 输出: 订单已发货
}
方向控制[编辑 | 编辑源代码]
枚举类可以用于表示方向,并定义相关行为:
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270);
fun opposite(): Direction {
return when (this) {
NORTH -> SOUTH
EAST -> WEST
SOUTH -> NORTH
WEST -> EAST
}
}
}
fun main() {
val direction = Direction.NORTH
println("${direction.name} 的反方向是 ${direction.opposite().name}") // 输出: NORTH 的反方向是 SOUTH
}
高级用法[编辑 | 编辑源代码]
实现接口[编辑 | 编辑源代码]
枚举类可以实现接口,为所有枚举常量提供统一的行为:
interface Printable {
fun print()
}
enum class LogLevel : Printable {
INFO {
override fun print() {
println("信息日志")
}
},
WARNING {
override fun print() {
println("警告日志")
}
};
// 枚举类也可以定义非抽象的成员
fun log(message: String) {
println("[$name] $message")
}
}
fun main() {
LogLevel.INFO.print() // 输出: 信息日志
LogLevel.WARNING.log("系统负载过高") // 输出: [WARNING] 系统负载过高
}
使用密封类替代枚举[编辑 | 编辑源代码]
当需要更复杂的类型层次时,可以考虑使用密封类(Sealed Class)代替枚举类:
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("成功: ${result.data}")
is Result.Error -> println("错误: ${result.message}")
Result.Loading -> println("加载中...")
}
}
总结[编辑 | 编辑源代码]
Kotlin枚举类是一种强大的工具,用于表示固定集合的值。通过枚举类,可以:
- 定义类型安全的常量集合。
- 为每个枚举常量添加属性和方法。
- 实现接口或定义抽象方法。
- 使用内置的
values()
和valueOf()
方法遍历或查找枚举常量。
枚举类特别适合表示状态、选项或有限集合的场景,能够显著提升代码的可读性和可维护性。