Kotlin 枚举类的基本概念
Kotlin 中的枚举类是一种特殊的类,用于定义一组固定的常量。枚举类通过 enum
关键字声明,每个枚举常量都是枚举类的实例。枚举类可以包含属性、方法以及构造函数。
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
枚举类的属性和方法
枚举类可以定义属性和方法,每个枚举常量可以初始化这些属性。以下是一个带有属性和方法的枚举类示例:
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF);
fun printRgb() {
println("RGB value of $name is $rgb")
}
}
fun main() {
Color.RED.printRgb() // 输出: RGB value of RED is 16711680
}
枚举类的构造函数
枚举类可以有构造函数,用于初始化枚举常量的属性。以下是一个带有构造函数的枚举类示例:
enum class Planet(val mass: Double, val radius: Double) {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6);
fun surfaceGravity(): Double {
val G = 6.67300E-11
return G * mass / (radius * radius)
}
}
fun main() {
println(Planet.EARTH.surfaceGravity()) // 输出: 9.802652743337129
}
枚举类的匿名类和抽象方法
枚举类可以定义抽象方法,每个枚举常量可以通过匿名类实现这些方法。以下是一个带有抽象方法的枚举类示例:
enum class Operation {
ADD {
override fun apply(x: Int, y: Int): Int = x + y
},
SUBTRACT {
override fun apply(x: Int, y: Int): Int = x - y
},
MULTIPLY {
override fun apply(x: Int, y: Int): Int = x * y
};
abstract fun apply(x: Int, y: Int): Int
}
fun main() {
println(Operation.ADD.apply(2, 3)) // 输出: 5
println(Operation.MULTIPLY.apply(2, 3)) // 输出: 6
}
枚举类的实用函数
Kotlin 为枚举类提供了一些实用函数,例如 values()
和 valueOf()
。values()
返回枚举类中所有常量的数组,valueOf()
根据名称返回对应的枚举常量。
enum class Season {
SPRING, SUMMER, AUTUMN, WINTER
}
fun main() {
val seasons = Season.values()
seasons.forEach { println(it) } // 输出: SPRING, SUMMER, AUTUMN, WINTER
val summer = Season.valueOf("SUMMER")
println(summer) // 输出: SUMMER
}
枚举类与 when
表达式
枚举类与 when
表达式结合使用时非常强大,可以简洁地处理不同枚举常量的逻辑。
enum class TrafficLight {
RED, YELLOW, GREEN
}
fun handleTrafficLight(light: TrafficLight) {
when (light) {
TrafficLight.RED -> println("Stop")
TrafficLight.YELLOW -> println("Caution")
TrafficLight.GREEN -> println("Go")
}
}
fun main() {
handleTrafficLight(TrafficLight.RED) // 输出: Stop
}
枚举类实现接口
枚举类可以实现接口,每个枚举常量可以通过匿名类实现接口的方法。
interface Printer {
fun print()
}
enum class Message : Printer {
HELLO {
override fun print() {
println("Hello, World!")
}
},
GOODBYE {
override fun print() {
println("Goodbye, World!")
}
}
}
fun main() {
Message.HELLO.print() // 输出: Hello, World!
Message.GOODBYE.print() // 输出: Goodbye, World!
}
枚举类的序列化与反序列化
枚举类在序列化和反序列化时非常有用,因为它们的名称可以被直接用作标识符。
enum class Status {
PENDING, APPROVED, REJECTED
}
data class Request(val id: Int, val status: Status)
fun main() {
val request = Request(1, Status.APPROVED)
println(request) // 输出: Request(id=1, status=APPROVED)
}
总结
Kotlin 的枚举类是一种强大的工具,可以用于定义一组固定的常量,并且支持属性、方法、构造函数、抽象方法以及接口实现。通过结合 when
表达式和其他 Kotlin 特性,枚举类可以极大地简化代码逻辑并提高可读性。