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