密封函数sealed

本文探讨了Kotlin中的密封类(sealed class)及其与枚举的差异。密封类作为增强版的枚举,允许有多个实例,但限制了所有可能的子类必须在密封类的同一个文件内定义。示例展示了如何使用密封类,包括无参数子类的单例对象和带参数的子类。在使用when表达式时,密封类能确保所有情况都被覆盖,如果添加新子类,未处理的新类型会导致编译错误,增强了代码的健壮性。
摘要由CSDN通过智能技术生成

sealed密封类
使用场景:增强版的枚举类型,不同之处在于枚举的实例是唯一的,而密封类可以有很多实例(如下TestA实例是唯一的,而TestB则可以创建多个实例)

sealed class Test {
    object TestA : Test()
    class TestB(value: String) : Test()
}
    private fun test(t: Test) = when(t){
        Test.TestA ->{}
        is Test.TestB -> {}
    }
    
    private fun test(t1: Test, t2: Test){
        val result = when(t1){
            Test.TestA -> {}
            is Test.TestB -> {}
        }
    }


注:
(1)子类要在封装类内部声明(不在同一个文件中无法继承密封类,同一文件不再内部可以继承但不建议)
(2)无构造参数的子类由于实例唯一,可以直接通过对象方式判断是否相等,无需is
(3)使用时尽量如上文对when赋值,便于后期再添加新类,编译的时候就会失败,避免遗漏对新类型的处理(如果不是赋值方式,则不会编译失败)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值