下面的代码在编译时不可能通过条件Color.Dark和Color.Light,因为这两个类是抽象的。
我错过了什么吗?
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)
}发布于 2020-01-20 02:40:33
两个左缩进的条件永远不会满足,因为Color.Dark和Color.Light不继承Color,而不是因为它们是抽象的。这意味着6个is分支中有2个是无用的,您可以安全地删除它们。但其他4个分支(is Color.Dark.DarkRed等)遍历所有的Color子类,并且Color是一个密封的类,所以可以在没有else分支的情况下使用when。
https://stackoverflow.com/questions/59812240
复制相似问题