Kotlin學習之-5.7 封裝類

Kotlin學習之-5.7 封裝類

封裝類是用來表示嚴格的類層級,當一個值可以是一個類型集合中的任意一個,而不是其他類型時。他們的相當於是枚舉類的擴展,對於每一個枚舉類型的值得集合也是嚴格定義的,但是每一個枚舉常量有且僅有一個單例,這樣一個封裝類的子類可以有多個包含狀態的實例。

要聲明一個封裝類,需要在類名前面用sealed描述符標識。一個封裝類可以有子類,但是他們必須全部都和封裝類定義在同一個文件裏。

sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()

這個例子中使用了Kotlin 1.1中新添加的特性,允許讓數據類擴展其他類,包括封裝類。

注意,那些擴展一個封裝類的子類的類可以定義在任何地方,不要求在同一個文件中。

使用封裝類最關鍵的好處是在when表達式中使用它們。 如果可能要驗證所有的條件語句,你不需要添加一個else分支。

fun eval(expr: Expr): Double = when(expr) {
    if Const -> expr.number
    is Sum -> eval(expr.e1) + eval(expr.e2)
    NotANumber -> Double.NaN
    // 不需要'else' 分支,因爲已經覆蓋了所有的條件語句
}

PS,我會堅持把這個系列寫完,有問題可以留言交流,也關注專欄Kotlin for Android Kotlin安卓開發

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