密封类是 kotlin 中比较特殊的类,用来表示受限的类继承结构。它的值为有限集内的类型,不能有任何其他类型。
密封类在某种意义上是枚举的类的扩展。枚举类的枚举常量只有一个实例,密封类的一个子类可以有可包含状态的多个实例。
密封类使用 sealed 修饰类,密封类可以有子类,子类可以写在密封类内部,也可以写在密封类同一个文件的同级位置。
密封类不允许外部扩展,可以有效的保护本类不被篡改。
sealed class ClientCMD{
/**浏览网页*/
class ViewPages(val url:String, val logined:Boolean):ClientCMD()
/**浏览过的网页*/
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))
}
运行结果示例
cofox.com
cofox2.com
cofox.com
false
cofox.com
false