33. 密封类

作者: 厚土火焱 | 来源:发表于2017-11-25 17:24 被阅读86次

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

    相关文章

      网友评论

        本文标题:33. 密封类

        本文链接:https://www.haomeiwen.com/subject/qsscbxtx.html