Kotlin:如何优雅、高效地使用枚举类型?

共 4229字,需浏览 9分钟

 ·

2023-06-22 13:44

Kotlin其中一个重要的特性便是 Enum 枚举,其本质上是一种数据类型:允许你定义一组用名称区分的常量

本篇文章将通过代码案例带你探索 Kotlin 枚举的进阶用法。

1. 枚举类

可以说 Enum Classes 是 Kotlin 中展示一组常量的绝佳方式。

具体来说,它允许你定义一组有限数量的成员来限定数据类型,并且你可以在代码的各处便捷使用这些枚举类型。

如下,我们用 enum 关键字定义一周内各天的枚举类型。

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

然后在代码中自由使用该枚举,比如:

fun getWeekendDays(): List<DayOfWeek> {
    return listOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY)
}

2. 枚举属性

除了展示类型,Kotlin Enum 还可以拥有属性 property,这意味着开发者可以给枚举成员添加额外的信息。

比如下面,我们给 DayOfWeek 枚举增加各天在周内的序号属性。

enum class DayOfWeek(val number: Int) {
    MONDAY(1),
    TUESDAY(2),
    WEDNESDAY(3),
    THURSDAY(4),
    FRIDAY(5),
    SATURDAY(6),
    SUNDAY(7)
}

然后便可以获得该天的序号信息。

fun getDayNumber(day: DayOfWeek)Int {
    return day.number
}

3. 枚举函数

Kotlin Enum 也支持定义函数,所以可以在枚举内部定义功能性方法、供外部使用。

如下在 DayOfWeek 枚举里增加一个用来判断该天是否属于周末的 isWeekend() 函数。

enum class DayOfWeek(val number: Int) {
    MONDAY(1),
    TUESDAY(2),
    WEDNESDAY(3),
    THURSDAY(4),
    FRIDAY(5),
    SATURDAY(6),
    SUNDAY(7);

    fun isWeekend()Boolean {
        return this == SATURDAY || this == SUNDAY
    }
}

在使用该枚举的地方,便可以直接使用该函数进行判断。

fun printDayType(day: DayOfWeek) {
    if (day.isWeekend()) {
        println("$day is a weekend day.")
    } else {
        println("$day is a weekday.")
    }
}

4. 枚举构造函数

既然 Enum 可以拥有属性,那么自然支持构造函数,所以开发者可以在实例构造的时候,增加充分多的信息。

比如,我们在 DayOfWeek 枚举的构造函数里,在序号以外增加该天的名称信息。

enum class DayOfWeek(val number: Intval displayName: String) {
    MONDAY(1"Monday"),
    TUESDAY(2"Tuesday"),
    WEDNESDAY(3"Wednesday"),
    THURSDAY(4"Thursday"),
    FRIDAY(5"Friday"),
    SATURDAY(6"Saturday"),
    SUNDAY(7"Sunday");

    override fun toString(): String {
        return displayName
    }
}

这样便可以获得该枚举携带的名称数据。

fun printDayName(day: DayOfWeek) { 
    println("The day of the week is ${day.displayName}"
}

5. 枚举扩展函数

和普通类一样,也可以针对 Enum Class 添加扩展函数。我们可以在枚举类外部,按需添加额外的功能函数。

比如这里给 DayOfWeek 枚举扩展一个获取下一天的函数。

fun DayOfWeek.nextDay(): DayOfWeek {
    return when (this) {
        MONDAY -> TUESDAY
        TUESDAY -> WEDNESDAY
        WEDNESDAY -> THURSDAY
        THURSDAY -> FRIDAY
        FRIDAY -> SATURDAY
        SATURDAY -> SUNDAY
        SUNDAY -> MONDAY
    }
}

像调用枚举本身定义的函数一样,自由使用该扩展函数。

fun printNextDay(day: DayOfWeek) {
    println("The next day is ${day.nextDay()}")
}

结语

可以看到 Kotlin Enum 可以帮助开发者定义好一组类型的常量:大大简化代码、具备更好的可读性以及提供额外的功能函数。

通过上述的进阶用法,相信大家可以使用 Enum 创造出更加健壮和高效的代码,同时也更容易理解和维护。


「点击关注,Carson每天带你学习一个Android知识点。」

最后福利:学习资料赠送

  • 福利:本人亲自整理的「Android学习资料」
  • 数量:10名
  • 参与方式:「点击右下角”在看“并回复截图到公众号,随机抽取」

    点击就能升职、加薪水!



浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报