Kotlin之密封类与枚举

主要内容

1、密封类与枚举类的区别

相同点:所有成员都属于本类本身
不同点:枚举只能有一个实例,而密封类的子类可以有多个实例,密封类的子类可以携带自己独有的状态参数以及行为方法来记录更多的实现信息以完成更多的功能,这是枚举类所不具备的。

2、密封类

密封类的申明使用 sealed 关键字

如下实例:密封类的所有成员都继承本类,但是允许个别成员拥有自己特殊属性如 EXCELLENT_MARKS

sealed class MyScore {

    object FAIL_A_GRADE : MyScore()//分数差
    object PASS_THE_MARK : MyScore()//分数及格
    object SCORE_WELL : MyScore()//分数良好
    class EXCELLENT_MARKS(val name: String) : MyScore()//分数优秀

}

3、密封类的代数数据类型

密封类与 when结合,使用 is 进行判断类型,跟枚举类相似

fun show() = when (myScore) {
        is MyScore.FAIL_A_GRADE -> "分数差"
        is MyScore.PASS_THE_MARK -> "分数及格"
        is MyScore.SCORE_WELL -> "分数良好"
        is MyScore.EXCELLENT_MARKS -> "分数优秀,name=${myScore.name}"
        
    }

4、密封类实例

当某个成员需要特殊属性的时候,用枚举就比较难实现这个需求,密封类就是为了解决这个问题而出现的

如下实例:当我们想知道优秀学生的名字的时候,只用枚举去实现就不好实现

//密封类,所有成员都继承本类
//当某个成员需要特殊属性的时候,用枚举就比较难实现这个需求
sealed class MyScore {

    object FAIL_A_GRADE : MyScore()//分数差
    object PASS_THE_MARK : MyScore()//分数及格
    object SCORE_WELL : MyScore()//分数良好
    class EXCELLENT_MARKS(val name: String) : MyScore()//分数优秀

}


class Teachers(private val myScore: MyScore) {

    fun show() = when (myScore) {

        is MyScore.FAIL_A_GRADE -> "分数差"
        is MyScore.PASS_THE_MARK -> "分数及格"
        is MyScore.SCORE_WELL -> "分数良好"
        is MyScore.EXCELLENT_MARKS -> "分数优秀,name=${myScore.name}"

    }

}

//todo kotlin语言的密封类学习
fun main() {
    println(Teachers(MyScore.FAIL_A_GRADE).show())
    println(Teachers(MyScore.EXCELLENT_MARKS("kotlin")).show())

}

输出:

分数差
分数优秀,name=kotlin


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_32955807/article/details/128474235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值