java - 带有 JDK 10 的 Kotlin
问题描述
最近我将我的 JDK 更新到 JDK 10,现在我遇到了 Kotlin 的配置问题,我无法运行我的代码。这是因为 JDK 10 还是因为其他原因?
我在创建 Kotlin 项目时从 InteliJ 得到的提示:
Configure Kotlin
Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk7.jar to library configuration
Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk7-sources.jar to library configuration
Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk8.jar to library configuration
Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk8-sources.jar to library configuration
解决方案
在撰写本文时(2018 年 9 月),Kotlin 的编译器默认不支持生成 Java 9+ 字节码。
参数-jvm-target 9
(参见 KT-21959)应该使 Kotlin 编译器生成版本 53 的字节码。
由于 Java 10 是bytecode version 54
(参考) - 我不确定这将如何工作。
仍然:
您可以编译成 JVM 8 字节码,可以在 JVM 9+ 上正常执行。
如果您想定义模块(或使用需要整个程序模块化的 jlink),您现在可以用 Java 编写文件
module-info.java
,并将文件放在与 Kotlin 文件相同的源根目录中。- Kotlin 编译器将正确限制依赖模块中非导出包中声明的可访问性。
- 目前,没有计划在 Kotlin 中支持模块定义。
除此之外,大多数 Java 9-11 语言特性(var、REPL、流改进等) - 在 Kotlin 中已经存在了一段时间,因此使用 Java 9-11 的主要直接好处是使用 JVM 进行优化,或模块系统/ jlink(您可以按照上面的描述使用)
推荐阅读
- scala - 测试 Scala 类型类中的成员资格
- java - 如何在 Html 中显示存储在 mongodb 中的二进制图像
- firebase - 状态之间的动态路由
- c - 为什么 long double 的精度不需要高于 double 的精度?
- r - 有没有更好的方法从 R 中的 .dta 中提取变量标签?
- regex - 谷歌表格 - 从引号中提取数字(不是第一个引号)
- python - 使用 tkinter 使用 for 循环的最佳方法?
- javascript - 无服务器指纹身份验证
- python - 填充小部件时如何自动调整 tkinter 窗口的大小
- tomcat - 多个 SSL 域指向 Tomcat 中的单个 WAR 文件 - 可能吗?