深入學(xué)習(xí)Kotlin?枚舉的簡(jiǎn)潔又高效進(jìn)階用法
引言
翻譯自:towardsdev.com/mastering-e…
Kotlin 作為現(xiàn)代的、強(qiáng)大的編程語(yǔ)言,可以給開(kāi)發(fā)者提供諸多特性和工具,得以幫助我們編寫(xiě)更加高效、更具可讀性的代碼。
其中一個(gè)重要的特性便是 Enum 枚舉,其本質(zhì)上是一種數(shù)據(jù)類型:允許你定義一組用名稱區(qū)分的常量。
本篇文章將通過(guò)代碼案例帶你探索 Kotlin 枚舉的進(jìn)階用法,進(jìn)而幫助大家理解如何將 Enum 更好地應(yīng)用到項(xiàng)目當(dāng)中。
1. 枚舉類
可以說(shuō) Enum Classes 是 Kotlin 中展示一組常量的絕佳方式。
具體來(lái)說(shuō),它允許你定義一組有限數(shù)量的成員來(lái)限定數(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,這意味著開(kāi)發(fā)者可以給枚舉成員添加額外的信息。
比如下面,我們給 DayOfWeek 枚舉增加各天在周內(nèi)的序號(hào)屬性。
enum class DayOfWeek(val number: Int) {
MONDAY(1),
TUESDAY(2),
WEDNESDAY(3),
THURSDAY(4),
FRIDAY(5),
SATURDAY(6),
SUNDAY(7)
}然后便可以獲得該天的序號(hào)信息。
fun getDayNumber(day: DayOfWeek): Int {
return day.number
}3. 枚舉函數(shù)
Kotlin Enum 也支持定義函數(shù),所以可以在枚舉內(nèi)部定義功能性方法、供外部使用。
如下在 DayOfWeek 枚舉里增加一個(gè)用來(lái)判斷該天是否屬于周末的 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ù)進(jìn)行判斷。
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ù),所以開(kāi)發(fā)者可以在實(shí)例構(gòu)造的時(shí)候,增加充分多的信息。
比如,我們?cè)?DayOfWeek 枚舉的構(gòu)造函數(shù)里,在序號(hào)以外增加該天的名稱信息。
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. 枚舉擴(kuò)展函數(shù)
和普通類一樣,也可以針對(duì) Enum Class 添加擴(kuò)展函數(shù)。我們可以在枚舉類外部,按需添加額外的功能函數(shù)。
比如這里給 DayOfWeek 枚舉擴(kuò)展一個(gè)獲取下一天的函數(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ù)一樣,自由使用該擴(kuò)展函數(shù)。
fun printNextDay(day: DayOfWeek) {
println("The next day is ${day.nextDay()}")
}結(jié)語(yǔ)
可以看到 Kotlin Enum 可以幫助開(kāi)發(fā)者定義好一組類型的常量:大大簡(jiǎn)化代碼、具備更好的可讀性以及提供額外的功能函數(shù)。
通過(guò)上述的進(jìn)階用法,相信大家可以使用 Enum 創(chuàng)造出更加健壯和高效的代碼,同時(shí)也更容易理解和維護(hù)。
以上就是深入學(xué)習(xí)Kotlin 枚舉的簡(jiǎn)潔又高效進(jìn)階用法的詳細(xì)內(nèi)容,更多關(guān)于Kotlin 枚舉進(jìn)階的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android 滑動(dòng)定位和吸附懸停效果實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 滑動(dòng)定位和吸附懸停效果實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android實(shí)現(xiàn)氣泡布局/彈窗效果 氣泡尖角方向及偏移量可控
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)氣泡布局/彈窗效果,可控制氣泡尖角方向及偏移量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
跨平臺(tái)移動(dòng)WEB應(yīng)用開(kāi)發(fā)框架iMAG入門(mén)教程
這篇文章主要介紹了跨平臺(tái)移動(dòng)WEB應(yīng)用開(kāi)發(fā)框架iMAG入門(mén)教程,iMAG最大的特點(diǎn)是生成各移動(dòng)平臺(tái)的原生代碼,需要的朋友可以參考下2014-07-07
Android使用Room操作數(shù)據(jù)庫(kù)流程詳解
谷歌推薦使用Room操作數(shù)據(jù)庫(kù),Room在 SQLite 上提供了一個(gè)抽象層,在充分利用 SQLite強(qiáng)大功能的同時(shí),能夠流暢地訪問(wèn)數(shù)據(jù)庫(kù)2022-11-11
Android程序報(bào)錯(cuò)程序包org.apache.http不存在問(wèn)題的解決方法
這篇文章主要介紹了Android程序報(bào)錯(cuò)"程序包org.apache.http不存在——Android 6.0已經(jīng)不支持HttpClient" 問(wèn)題的解決方法,感興趣的小伙伴們可以參考一下2016-06-06
Android界面設(shè)計(jì)(APP設(shè)計(jì)趨勢(shì) 左側(cè)隱藏菜單右邊顯示content)
這文章講述了2013年未來(lái)的移動(dòng)APP設(shè)計(jì)趨勢(shì),感覺(jué)挺有道理的:Android界面設(shè)計(jì)實(shí)現(xiàn)左側(cè)隱藏菜單右邊顯示content,感興趣的你可以了解下啊,希望本文對(duì)你的APP設(shè)計(jì)提高有所幫助哦2013-01-01
Android中自定義的dialog中的EditText無(wú)法彈出輸入法解決方案
這篇文章主要介紹了Android中自定義的dialog中的EditText無(wú)法彈出輸入法解決方案,需要的朋友可以參考下2017-04-04

