跳转到内容

Kotlin枚举类

来自代码酷

Kotlin枚举类[编辑 | 编辑源代码]

枚举类(Enum Class)是Kotlin中一种特殊的类,用于表示一组固定的常量。枚举类通过列举所有可能的取值来定义类型,使得代码更加清晰、类型安全且易于维护。枚举类常用于表示状态、方向、颜色等有限集合的场景。

基本语法[编辑 | 编辑源代码]

Kotlin中使用enum关键字定义枚举类,每个枚举常量都是枚举类的实例,用逗号分隔。枚举类可以包含属性、方法和构造函数。

enum class Direction {
    NORTH, SOUTH, EAST, WEST
}

上述代码定义了一个名为Direction的枚举类,包含四个常量:NORTHSOUTHEASTWEST

访问枚举常量[编辑 | 编辑源代码]

枚举常量可以通过类名直接访问:

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()方法遍历或查找枚举常量。

枚举类特别适合表示状态、选项或有限集合的场景,能够显著提升代码的可读性和可维护性。