首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Kotlin中密封类的密封子类

关于Kotlin中密封类的密封子类
EN

Stack Overflow用户
提问于 2020-01-20 00:48:42
回答 1查看 183关注 0票数 0

下面的代码在编译时不可能通过条件Color.Dark和Color.Light,因为这两个类是抽象的。

我错过了什么吗?

代码语言:javascript
复制
sealed class Color () {
  sealed class Dark () {
    class DarkRed : Color()
    class DarkBlue : Color()
    }   
  sealed class Light {
    class LightRed : Color()
    class LightBlue : Color()
    }
}   

fun eval(c: Color) =
        when (c) {
        is Color.Dark -> println("Dark")
            is Color.Dark.DarkRed -> println("Dark Red")
            is Color.Dark.DarkBlue -> println("Dark Blue")

        is Color.Light -> println("Light")
            is Color.Light.LightRed -> println("Light Red")
            is Color.Light.LightBlue -> println("Light Blue")
}

fun main(args: Array<String>) {
    val dr = Color.Dark.DarkRed()
    eval(dr)
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-20 02:40:33

两个左缩进的条件永远不会满足,因为Color.DarkColor.Light不继承Color,而不是因为它们是抽象的。这意味着6个is分支中有2个是无用的,您可以安全地删除它们。但其他4个分支(is Color.Dark.DarkRed等)遍历所有的Color子类,并且Color是一个密封的类,所以可以在没有else分支的情况下使用when

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59812240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档