Kotlin枚举类:简洁高效的类型安全

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 特性,枚举类可以极大地简化代码逻辑并提高可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值