【问题标题】:Kotlin sealed classes - why doesn't compiler check for all subtypes?Kotlin 密封类 - 为什么编译器不检查所有子类型?
【发布时间】:2019-01-23 19:29:11
【问题描述】:

使用sealed classes 时,编译器仅检查同一文件中的子类型。

密封类的一大卖点是使用when 表达式时的详尽检查。那么为什么没有实现呢?

在 1 个文件中我有:

class C : B()

在另一个文件中:

sealed class A

open class B : A()

fun switch(input: A) =
    when(input) {
        is B -> Unit
//        is C -> Unit - I expect a compiler error since this is a subtype and it's commented out
    }

【问题讨论】:

  • 第一种情况——is B涵盖了B的所有子类,不需要C。但是你可能在B 之前有is C 的情况,这将是有意义的
  • 哦,我完全错过了 C 是 B 所以is B 涵盖了它。谢谢!

标签: kotlin sealed-class


【解决方案1】:

正如 Eugene Petrenko commented,编译器所需的 is B 案例涵盖了 B 的所有子类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2020-07-07
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多