kotlin - 最后一堂课为什么会抱怨?
问题描述
因此,在以下代码中,我得到编译错误“何时必须详尽添加必要的其他”:
class Test {
}
fun eval(e: Test): Int =
when(e) {
is Test -> throw IllegalArgumentException()
}
为了澄清这只是旨在理解 Kotlin 的代码(这里是新手)。
所以Test
Kotlin 的默认行为不能被任何子类扩展。
那么when
预期的其他情况是什么?
在这种情况下使用sealed
也不起作用
解决方案
添加sealed
而不进行其他更改是没有意义的:它使类抽象并且不可能子类化,因此您将永远不会有实例。我相信这是一个编译器错误,它与https://youtrack.jetbrains.com/issue/KT-28249非常相似,但使用class
而不是object
.
这也是一个低影响的,因为如果is Test
是唯一的分支,你可以用这个分支替换整个when
,如果不是,你可以is Test
用else
.
推荐阅读
- travis-ci - 同一阶段的 Travis CI 测试是否发生在同一实例中?
- java - 使用 TestnG 运行 Selenium 时,配置失败:BeforeClass 设置?
- autodesk-forge - 更改查看器中的光标图标
- python - 调整图像大小 Python Tkinter
- docker - 从主机启动 docker-compose 中的 cron 作业?
- node.js - React-Bootstrap-Table-Next 表中只有一行数据
- java - 可执行 Jar 不能在命令行中工作,但在 Eclipse 中工作正常
- html - 使用 Embedded-jetty 和 jersey 构建一个 Web 应用程序 .. 使用请求调度
- jenkins - 詹金斯声明性管道的不可序列化错误
- c# - 从 Process.Start 运行 CMD 不会启动