首页 > 解决方案 > 最后一堂课为什么会抱怨?

问题描述

因此,在以下代码中,我得到编译错误“何时必须详尽添加必要的其他”:

class Test {

}

fun eval(e: Test): Int =
        when(e) {
            is Test -> throw IllegalArgumentException()
        }

为了澄清这只是旨在理解 Kotlin 的代码(这里是新手)。
所以TestKotlin 的默认行为不能被任何子类扩展。
那么when预期的其他情况是什么?
在这种情况下使用sealed也不起作用

标签: kotlinkotlin-when

解决方案


添加sealed而不进行其他更改是没有意义的:它使类抽象并且不可能子类化,因此您将永远不会有实例。我相信这是一个编译器错误,它与https://youtrack.jetbrains.com/issue/KT-28249非常相似,但使用class而不是object.

这也是一个低影响的,因为如果is Test是唯一的分支,你可以用这个分支替换整个when,如果不是,你可以is Testelse.


推荐阅读