密封類是 kotlin 中比較特殊的類,用來表示受限的類繼承結(jié)構(gòu)蚀同。它的值為有限集內(nèi)的類型,不能有任何其他類型啊掏。
密封類在某種意義上是枚舉的類的擴展。枚舉類的枚舉常量只有一個實例,密封類的一個子類可以有可包含狀態(tài)的多個實例腕侄。
密封類使用 sealed 修飾類,密封類可以有子類冕杠,子類可以寫在密封類內(nèi)部,也可以寫在密封類同一個文件的同級位置分预。
密封類不允許外部擴展兢交,可以有效的保護本類不被篡改笼痹。
sealed class ClientCMD{
/**瀏覽網(wǎng)頁*/
class ViewPages(val url:String, val logined:Boolean):ClientCMD()
/**瀏覽過的網(wǎng)頁*/
data class ViewedPages(val id:Int, val url: String):ClientCMD()
object website:ClientCMD()
fun eval(clientCMD: ClientCMD):Any = when(clientCMD){
is ViewedPages -> clientCMD.url
is ViewPages -> if (clientCMD.logined) {"true"} else {"false"}
is website -> clientCMD.toString()
}
}
fun main(args: Array<String>) {
val ss = ClientCMD.ViewedPages(0,"cofox.com")
val ss1 = ClientCMD.ViewPages("cofox2.com",false)
println(ss.url)
println(ss1.url)
println(ss.eval(ss))
println(ss.eval(ss1))
println(ss1.eval(ss))
println(ss1.eval(ss1))
}
運行結(jié)果示例
cofox.com
cofox2.com
cofox.com
false
cofox.com
false