封闭类(Sealed Classes)

封闭类(Sealed Classes)用于代表严格的类结构,值只能是有限集合中的某中类型,不可以是任何其
它类型。这就相当于一个枚举类的扩展:枚举值集合的类型是严格限制的,但每个
枚举常量只有一个实例,而密封类的子类可以有包含不同状态的多个实例。
声明密封类需要在 class 前加一个 sealed 修饰符。密封类可以有子类但必须全部嵌
套在密封类声明内部

使用封闭类的主要好处是when表达式,不需要在使用else形式了

//  封闭类(Sealed Classes)
// 用sealed关键字标识
sealed class Expr
data class Const(val number:Double):Expr()
data class Sum(val e1:Expr, val e2:Expr):Expr()
object NotANumber:Expr()
fun eval(expr:Expr):Double = when(expr)
{
    is Const -> expr.number
    is Sum -> eval(expr.e1) + eval(expr.e2)
    NotANumber ->Double.NaN
}
fun main(args: Array<String>)
{
    var mConst1 = Const(20.0)
    var mConst2 = Const(15.2)
    var mSum = Sum(mConst1,mConst2)
    println(eval(mConst1))
    println(eval(mConst2))
    println(eval(mSum))
}

输出:

20.0

15.2

35.2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值