原文地址: Kotlin學習快速入門(9)—— 密封類的使用 - Stars-One的雜貨小窩 代碼邏輯中,很多時候我們會需要分支語句,來根據數據的情況走不同的處理邏輯,而密封類就是在這種情況下,方便我們的使用 介紹 密封類是用來表示受限的類繼承結構 即當類中的一個值只能是有限的幾種類型,而不能是其 ...
代碼邏輯中,很多時候我們會需要分支語句,來根據數據的情況走不同的處理邏輯,而密封類就是在這種情況下,方便我們的使用
介紹
密封類是用來表示受限的類繼承結構
即當類中的一個值只能是有限的幾種類型,而不能是其他的任何類型,從使用角度來說,相當於是枚舉類的擴展
PS: Java17也有了這個密封類
使用
假設我們有中情形,需要根據一個type的數值來進行不同的邏輯,如下代碼:
fun getMsg(type: Int) :String{
return when(type) {
1 -> TODO()
2 -> TODO()
else -> TODO()
}
}
編譯器一定會提示我們需要寫上有個else,如下圖所示
這個時候是不是有點繁瑣了,於是我們想到的一種優化方法,就是使用枚舉類
enum class MyType{
TYPE_1,TYPE_2
}
fun getMsg(type: MyType) :String{
return when(type) {
MyType.TYPE_1 -> TODO()
MyType.TYPE_2 -> TODO()
}
}
而且可以通過編譯器,將所有的枚舉都加到分支上去(快捷鍵按下Alt+Enter
即可),如下圖所示
但是,這個情況也有些限制,就是枚舉類用來判斷類型,但是不能靈活地攜帶些數據,如果使用密封類,就是解決此問題
密封類的關鍵字為sealed class
,如下代碼所示:
sealed class MyType
class Type1(val data:String):MyType()
class Type2(val errorCode:Int):MyType()
fun getMsg(type: MyType) :String{
return when(type) {
is Type1 -> TODO()
is Type2 -> TODO()
}
}
這裡Type1和Type2類都可以攜帶自己的數據
當然,上面只是個簡單的寫法,MyType這個類也可以繼承或實現其他介面,比如說在RecyclerView中定義個ItemViewType,用來創建不同的itemView的類型
參考
提問之前,請先看提問須知 點擊右側圖標發起提問 或者加入QQ群一起學習 TornadoFx學習交流群:1071184701