【发布时间】:2019-12-04 18:46:19
【问题描述】:
所以在下面的代码中,我得到编译错误“何时必须详尽添加必要的其他”:
class Test {
}
fun eval(e: Test): Int =
when(e) {
is Test -> throw IllegalArgumentException()
}
为了澄清这只是旨在理解 Kotlin 的代码(这里是新手)。
所以 Test 在 Kotlin 的默认行为下不能被任何子类扩展。
那么when 期望的其他情况是什么?
在这种情况下使用sealed 也不起作用
【问题讨论】:
-
疯狂猜测:1) 检查穷举的代码并没有检查这样的条件,因为有更好的替代方案 (
if) 并且不值得付出努力。或者 2) 仅仅因为Test现在不开放,并不意味着它不会在未来开放。意思是,如果eval()被编译和交付,然后有人打开Test并继承它,eval()将失败。 -
@Todd:关于 (2) 为什么
eval失败了?我会说这是一件好事,因为行为的变化(使其打开)会在编译时被捕获。 -
@Jim 我没有得到密封类的问题,即列出所有可能的值被认为是详尽的。 Kotlin 1.3.41 就是这样,仅供参考
-
@user2340612:你复制粘贴我的代码并使用关键字
sealed吗? -
@user2340612:另外我如何检查我的 IDE 使用的 Kotlin 版本?
标签: kotlin kotlin-when