深入學(xué)習(xí)Kotlin?枚舉的簡潔又高效進階用法
引言
翻譯自:towardsdev.com/mastering-e…
Kotlin 作為現(xiàn)代的、強大的編程語言,可以給開發(fā)者提供諸多特性和工具,得以幫助我們編寫更加高效、更具可讀性的代碼。
其中一個重要的特性便是 Enum
枚舉,其本質(zhì)上是一種數(shù)據(jù)類型:允許你定義一組用名稱區(qū)分的常量。
本篇文章將通過代碼案例帶你探索 Kotlin 枚舉的進階用法,進而幫助大家理解如何將 Enum
更好地應(yīng)用到項目當(dāng)中。
1. 枚舉類
可以說 Enum Classes 是 Kotlin 中展示一組常量的絕佳方式。
具體來說,它允許你定義一組有限數(shù)量的成員來限定數(shù)據(jù)類型,并且你可以在代碼的各處便捷使用這些枚舉類型。
如下,我們用 enum 關(guān)鍵字定義一周內(nèi)各天的枚舉類型。
enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
然后在代碼中自由使用該枚舉,比如:
fun getWeekendDays(): List<DayOfWeek> { return listOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY) }
2. 枚舉屬性
除了展示類型,Kotlin Enum 還可以擁有屬性 property,這意味著開發(fā)者可以給枚舉成員添加額外的信息。
比如下面,我們給 DayOfWeek
枚舉增加各天在周內(nèi)的序號屬性。
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. 枚舉函數(shù)
Kotlin Enum 也支持定義函數(shù),所以可以在枚舉內(nèi)部定義功能性方法、供外部使用。
如下在 DayOfWeek
枚舉里增加一個用來判斷該天是否屬于周末的 isWeekend() 函數(shù)。
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 } }
在使用該枚舉的地方,便可以直接使用該函數(shù)進行判斷。
fun printDayType(day: DayOfWeek) { if (day.isWeekend()) { println("$day is a weekend day.") } else { println("$day is a weekday.") } }
4. 枚舉構(gòu)造函數(shù)
既然 Enum 可以擁有屬性,那么自然支持構(gòu)造函數(shù),所以開發(fā)者可以在實例構(gòu)造的時候,增加充分多的信息。
比如,我們在 DayOfWeek
枚舉的構(gòu)造函數(shù)里,在序號以外增加該天的名稱信息。
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 } }
這樣便可以獲得該枚舉攜帶的名稱數(shù)據(jù)。
fun printDayName(day: DayOfWeek) { println("The day of the week is ${day.displayName}") }
5. 枚舉擴展函數(shù)
和普通類一樣,也可以針對 Enum Class 添加擴展函數(shù)。我們可以在枚舉類外部,按需添加額外的功能函數(shù)。
比如這里給 DayOfWeek
枚舉擴展一個獲取下一天的函數(shù)。
fun DayOfWeek.nextDay(): DayOfWeek { return when (this) { MONDAY -> TUESDAY TUESDAY -> WEDNESDAY WEDNESDAY -> THURSDAY THURSDAY -> FRIDAY FRIDAY -> SATURDAY SATURDAY -> SUNDAY SUNDAY -> MONDAY } }
像調(diào)用枚舉本身定義的函數(shù)一樣,自由使用該擴展函數(shù)。
fun printNextDay(day: DayOfWeek) { println("The next day is ${day.nextDay()}") }
結(jié)語
可以看到 Kotlin Enum 可以幫助開發(fā)者定義好一組類型的常量:大大簡化代碼、具備更好的可讀性以及提供額外的功能函數(shù)。
通過上述的進階用法,相信大家可以使用 Enum 創(chuàng)造出更加健壯和高效的代碼,同時也更容易理解和維護。
以上就是深入學(xué)習(xí)Kotlin 枚舉的簡潔又高效進階用法的詳細內(nèi)容,更多關(guān)于Kotlin 枚舉進階的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android自定義view實現(xiàn)雪花特效實例代碼
實現(xiàn)雪花的效果其實也可以通過自定義View的方式來實現(xiàn)的,而且操作上也相對簡單一些,下面這篇文章主要給大家介紹了關(guān)于Android自定義view實現(xiàn)雪花特效的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-12-12Android實現(xiàn)加載時提示“正在加載,請稍后”的方法
在現(xiàn)在的很多應(yīng)用中,當(dāng)在加載的時候,如果頁面動態(tài)數(shù)據(jù)較多,會有很長一段時間的空白頁面,如果加上這個頁面正在加載的提示,使得應(yīng)用更加人性化。這篇文章就給大家分享了在 Android實現(xiàn)加載時提示“正在加載,請稍后”的方法,有需要的朋友們可以參考借鑒。2016-10-10Android開發(fā)在RecyclerView上面實現(xiàn)"拖放"和"滑動刪除"-2
這篇文章主要介紹了Android開發(fā)在RecyclerView上面實現(xiàn)"拖放"和"滑動刪除"(二)功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03android實現(xiàn)常駐通知欄遇到的問題及解決辦法
這篇文章主要介紹了android實現(xiàn)常駐通知欄遇到的問題及解決辦法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android關(guān)于Glide的使用(高斯模糊、加載監(jiān)聽、圓角圖片)
這篇文章主要為大家詳細介紹了Android關(guān)于Glide的使用,內(nèi)容豐富,高斯模糊、加載監(jiān)聽、圓角圖片希望大家可以掌握,感興趣的小伙伴們可以參考一下2016-11-11Android 彈出Dialog時隱藏狀態(tài)欄和底部導(dǎo)航欄的方法
這篇文章主要介紹了Android 彈出Dialog時隱藏狀態(tài)欄和底部導(dǎo)航欄的實例代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07Android 快速實現(xiàn)狀態(tài)欄透明樣式的示例代碼
下面小編就為大家分享一篇Android 快速實現(xiàn)狀態(tài)欄透明樣式的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01