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