iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
0
Software Development

初探Kotlin系列 第 17

[Day 17] Sealed Classes

Sealed Classes用來限制類別的繼承關係 這表示Sealed Classes能繼承的子類別數量是有限的
某種意義上是enum的擴展

使用sealed關鍵字宣告Sealed Classes,Sealed Classes可以有子類別但是需要跟Sealed Classes在同一份.kt檔上

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

Sealed Classes本身是一個abstract 不能被實例化但可以有abstract members.
Sealed Classes的建構子都是private
Sealed Classes的好處在於使用when時 如果可以匹配所有的條件式就不需使用else

fun eval(expr: Expr): Double = when(expr) {
    is Const -> expr.number
    is Sum -> eval(expr.e1) + eval(expr.e2)
    NotANumber -> Double.NaN
    // the `else` clause is not required because we've covered all the cases
}

上一篇
[Day 16] Data Classes
下一篇
[Day 18] Generics
系列文
初探Kotlin19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言