密封类

密封类被用来展示限制的类结构,当一个值可以是一个限制集合类型中的任何一个时,并且不会再存在其他值时,可以使用密封类。从某种意义上讲,它是枚举类的一个扩展:它们都是一个值的集合,但是内聚常量是单例的,密封类的子类可以有多个实例。

声明密封类需要使用sealed关键字,并在class之前。密封类可以有子类,但是所有的子类必须是嵌套在密封类中的。

sealed class Expr {
    class Const(val number: Double) : Expr()
    class Sum(val e1: Expr, val e2: Expr) : Expr()
    object NotANumber : Expr()
}

需要注意的是继承自密封类的子类(间接继承)可以放置在任何地方,而不是必须声明在密封类中。

使用密封类的一个关键好处是将其应用到when语句。这将有可能覆盖所有的分支,而且你不需要添加一个else分支。

results matching ""

    No results matching ""