深入学习Kotlin 枚举的简洁又高效进阶用法
作者:TechMerger
引言
翻译自: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 创造出更加健壮和高效的代码,同时也更容易理解和维护。
以上就是深入学习Kotlin 枚举的简洁又高效进阶用法的详细内容,更多关于Kotlin 枚举进阶的资料请关注脚本之家其它相关文章!