翻译自:towardsdev.com/mastering-e…

Kotlin 作为现代的、强壮的编程语言,能够给开发者供给诸多特性和工具,得以协助咱们编写愈加高效、更具可读性的代码。

其中一个重要的特性便是 Enum 枚举,其本质上是一种数据类型:允许你界说一组用称号区别的常量

本篇文章将通过代码事例带你探究 Kotlin 枚举的进阶用法,进而协助咱们了解如何将 Enum 更好地应用到项目傍边。

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: Int, val 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 创造出愈加健壮和高效的代码,同时也更简单了解和保护。