深入學習Kotlin?枚舉的簡潔又高效進階用法
引言
翻譯自:towardsdev.com/mastering-e…
Kotlin 作為現(xiàn)代的、強大的編程語言,可以給開發(fā)者提供諸多特性和工具,得以幫助我們編寫更加高效、更具可讀性的代碼。
其中一個重要的特性便是 Enum 枚舉,其本質上是一種數(shù)據(jù)類型:允許你定義一組用名稱區(qū)分的常量。
本篇文章將通過代碼案例帶你探索 Kotlin 枚舉的進階用法,進而幫助大家理解如何將 Enum 更好地應用到項目當中。
1. 枚舉類
可以說 Enum Classes 是 Kotlin 中展示一組常量的絕佳方式。
具體來說,它允許你定義一組有限數(shù)量的成員來限定數(shù)據(jù)類型,并且你可以在代碼的各處便捷使用這些枚舉類型。
如下,我們用 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,這意味著開發(fā)者可以給枚舉成員添加額外的信息。
比如下面,我們給 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. 枚舉函數(shù)
Kotlin Enum 也支持定義函數(shù),所以可以在枚舉內部定義功能性方法、供外部使用。
如下在 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. 枚舉構造函數(shù)
既然 Enum 可以擁有屬性,那么自然支持構造函數(shù),所以開發(fā)者可以在實例構造的時候,增加充分多的信息。
比如,我們在 DayOfWeek 枚舉的構造函數(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
}
}像調用枚舉本身定義的函數(shù)一樣,自由使用該擴展函數(shù)。
fun printNextDay(day: DayOfWeek) {
println("The next day is ${day.nextDay()}")
}結語
可以看到 Kotlin Enum 可以幫助開發(fā)者定義好一組類型的常量:大大簡化代碼、具備更好的可讀性以及提供額外的功能函數(shù)。
通過上述的進階用法,相信大家可以使用 Enum 創(chuàng)造出更加健壯和高效的代碼,同時也更容易理解和維護。
以上就是深入學習Kotlin 枚舉的簡潔又高效進階用法的詳細內容,更多關于Kotlin 枚舉進階的資料請關注腳本之家其它相關文章!
相關文章
Android實現(xiàn)氣泡布局/彈窗效果 氣泡尖角方向及偏移量可控
這篇文章主要為大家詳細介紹了Android實現(xiàn)氣泡布局/彈窗效果,可控制氣泡尖角方向及偏移量,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08
Android使用Room操作數(shù)據(jù)庫流程詳解
谷歌推薦使用Room操作數(shù)據(jù)庫,Room在 SQLite 上提供了一個抽象層,在充分利用 SQLite強大功能的同時,能夠流暢地訪問數(shù)據(jù)庫2022-11-11
Android程序報錯程序包org.apache.http不存在問題的解決方法
這篇文章主要介紹了Android程序報錯"程序包org.apache.http不存在——Android 6.0已經(jīng)不支持HttpClient" 問題的解決方法,感興趣的小伙伴們可以參考一下2016-06-06
Android界面設計(APP設計趨勢 左側隱藏菜單右邊顯示content)
這文章講述了2013年未來的移動APP設計趨勢,感覺挺有道理的:Android界面設計實現(xiàn)左側隱藏菜單右邊顯示content,感興趣的你可以了解下啊,希望本文對你的APP設計提高有所幫助哦2013-01-01
Android中自定義的dialog中的EditText無法彈出輸入法解決方案
這篇文章主要介紹了Android中自定義的dialog中的EditText無法彈出輸入法解決方案,需要的朋友可以參考下2017-04-04

