33. 密封类

密封类是 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) {
    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

你可能感兴趣的:(33. 密封类)