欢迎光临
我们一直在努力

Kotlin枚举类完全指南

Kotlin 枚举类的基本定义

枚举类是一种特殊的数据类型,用于定义一组固定的常量。Kotlin 中使用 enum class 关键字定义枚举类:

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

每个枚举常量都是枚举类的实例,可以直接通过类名访问:

val direction = Direction.NORTH
println(direction) // 输出: NORTH

枚举类的属性和方法

枚举类可以像普通类一样定义属性和方法。每个枚举常量可以初始化自己的属性值:

enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}

fun main() {
println(Color.RED.rgb) // 输出: 16711680
}

枚举类还可以定义方法,包括抽象方法:

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 枚举类提供了一些实用功能,如获取所有枚举常量和通过名称查找枚举常量:

enum class Season {
SPRING, SUMMER, AUTUMN, WINTER
}

fun main() {
// 获取所有枚举常量
val seasons = Season.values()
seasons.forEach { println(it) }

// 通过名称查找枚举常量
val summer = Season.valueOf("SUMMER")
println(summer) // 输出: SUMMER
}

枚举类与 when 表达式

枚举类与 when 表达式结合使用时非常强大,可以确保所有枚举常量都被处理:

enum class Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

fun isWeekend(day: Day) = when(day) {
Day.SATURDAY, Day.SUNDAY -> true
else -> false
}

fun main() {
println(isWeekend(Day.MONDAY)) // 输出: false
println(isWeekend(Day.SUNDAY)) // 输出: true
}

枚举类实现接口

枚举类可以实现接口,每个枚举常量可以提供不同的实现:

interface Printable {
fun print()
}

enum class Shape : Printable {
CIRCLE {
override fun print() {
println("圆形")
}
},
SQUARE {
override fun print() {
println("正方形")
}
}
}

fun main() {
Shape.CIRCLE.print() // 输出: 圆形
Shape.SQUARE.print() // 输出: 正方形
}

枚举类的序列化和反序列化

在实际应用中,经常需要将枚举类与字符串相互转换:

enum class Status {
PENDING, APPROVED, REJECTED
}

fun main() {
// 枚举转字符串
val status = Status.APPROVED
val statusStr = status.name
println(statusStr) // 输出: APPROVED

// 字符串转枚举
val parsedStatus = Status.valueOf("PENDING")
println(parsedStatus) // 输出: PENDING
}

枚举类的进阶用法

枚举类可以结合密封类实现更复杂的功能:

sealed class Command {
object Start : Command()
object Stop : Command()
data class Execute(val param: String) : Command()
}

fun process(command: Command) = when(command) {
is Command.Start -> println("开始执行")
is Command.Stop -> println("停止执行")
is Command.Execute -> println("执行参数: ${command.param}")
}

fun main() {
process(Command.Start) // 输出: 开始执行
process(Command.Execute("test")) // 输出: 执行参数: test
}

枚举类的性能考虑

枚举类相比常量类会占用更多内存,但在大多数情况下性能差异可以忽略。如果需要极致的性能,可以考虑使用常量类:

object Colors {
const val RED = 0xFF0000
const val GREEN = 0x00FF00
const val BLUE = 0x0000FF
}

fun main() {
println(Colors.RED) // 输出: 16711680
}

以上内容展示了 Kotlin 枚举类的主要特性和用法,从基础定义到高级用法,涵盖了实际开发中的常见场景。

赞(0)
未经允许不得转载:171主机测评 » Kotlin枚举类完全指南
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址