前言
密封類(lèi),可以理解為枚舉,規(guī)定了有限個(gè)類(lèi)型,不可以存在其他類(lèi)型,但枚舉每個(gè)枚舉常量只存在一個(gè)示例,但是密封類(lèi)的子類(lèi)可以有多個(gè)示例,所以可以將密封類(lèi)看做是枚舉的拓展,基于枚舉,高于枚舉,青出于藍(lán)而勝于藍(lán)。
正文
密封類(lèi)和普通類(lèi)的區(qū)別,在于密封類(lèi)使用了sealed修飾符,雖然密封類(lèi)也可以有子類(lèi),但是所有子類(lèi)都必須在與密封類(lèi)自身相同的文件中聲明。
還是上栗子:
sealed class Time {
}
data class Time1(val number: Int) : Time() {
}
data class Time2(val number: Int, val name: String) : Time() {
}
注意:擴(kuò)展密封類(lèi)子類(lèi)的類(lèi)(間接繼承者)可以放在任何位置,而無(wú)需在同一個(gè)文件中。
使用密封類(lèi)的關(guān)鍵好處在于使用 when
表達(dá)式 的時(shí)候,如果能夠驗(yàn)證語(yǔ)句覆蓋了所有情況,就不需要為該語(yǔ)句再添加一個(gè) else子句了。
fun main(args: Array<String>) {
println(list(Time1(5)))
println(list(Time2(8,"hehe")))
}
fun list(time:Time) : String = when(time){
is Time1 -> "${time.number}"
is Time2 -> time.name
}```
---------------------
####后記
關(guān)于密封類(lèi),使用比較靈活,記住所有子類(lèi)都必須在與密封類(lèi)自身相同的文件中聲明。