深入学习Kotlin 枚举的简洁又高效进阶用法

 更新时间:2023年05月09日 09:16:57   作者:TechMerger  
这篇文章主要为大家介绍了深入学习Kotlin 枚举简洁又高效的进阶用法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

翻译自: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 枚举进阶的资料请关注脚本之家其它相关文章!

相关文章

  • Android自定义view实现雪花特效实例代码

    Android自定义view实现雪花特效实例代码

    实现雪花的效果其实也可以通过自定义View的方式来实现的,而且操作上也相对简单一些,下面这篇文章主要给大家介绍了关于Android自定义view实现雪花特效的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 浅析Android手机卫士sim卡绑定

    浅析Android手机卫士sim卡绑定

    这篇文章主要介绍了浅析Android手机卫士sim卡绑定的相关资料,需要的朋友可以参考下
    2016-04-04
  • Android实现加载时提示“正在加载,请稍后”的方法

    Android实现加载时提示“正在加载,请稍后”的方法

    在现在的很多应用中,当在加载的时候,如果页面动态数据较多,会有很长一段时间的空白页面,如果加上这个页面正在加载的提示,使得应用更加人性化。这篇文章就给大家分享了在 Android实现加载时提示“正在加载,请稍后”的方法,有需要的朋友们可以参考借鉴。
    2016-10-10
  • Android开发在RecyclerView上面实现

    Android开发在RecyclerView上面实现"拖放"和"滑动删除"-2

    这篇文章主要介绍了Android开发在RecyclerView上面实现"拖放"和"滑动删除"(二)功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • android实现常驻通知栏遇到的问题及解决办法

    android实现常驻通知栏遇到的问题及解决办法

    这篇文章主要介绍了android实现常驻通知栏遇到的问题及解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android关于Glide的使用(高斯模糊、加载监听、圆角图片)

    Android关于Glide的使用(高斯模糊、加载监听、圆角图片)

    这篇文章主要为大家详细介绍了Android关于Glide的使用,内容丰富,高斯模糊、加载监听、圆角图片希望大家可以掌握,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android 弹出Dialog时隐藏状态栏和底部导航栏的方法

    Android 弹出Dialog时隐藏状态栏和底部导航栏的方法

    这篇文章主要介绍了Android 弹出Dialog时隐藏状态栏和底部导航栏的实例代码,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Flutter组件适配方法实现详解

    Flutter组件适配方法实现详解

    在写flutter的代码的时候为了让组件大小适配屏幕使用了flutter_screenUtil插件。在调试的时候是正常的,可以适配屏幕。但是打包之后就会失去效果,这篇文章主要介绍了Flutter组件适配方法实现
    2022-10-10
  • 基于Android实现数独游戏

    基于Android实现数独游戏

    这篇文章主要为大家详细介绍了基于Android实现数独游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android 快速实现状态栏透明样式的示例代码

    Android 快速实现状态栏透明样式的示例代码

    下面小编就为大家分享一篇Android 快速实现状态栏透明样式的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01

最新评论