Kotlin學習快速入門(9)—— 密封類的使用

原文地址: 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的類型

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章