Kotlin JDK 10

Kotlin with JDK 10

最近我将我的 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 (see KT-21959) 应该使 Kotlin 编译器生成版本 53 的字节码。

因为 Java 10 是 bytecode version 54 (reference) - 我不确定这将如何工作。

仍然:

  • 可以编译成JVM 8字节码,JVM 9+可以正常执行。

  • 如果你想定义模块(或者使用jlink需要整个程序模块化)你今天可以在Java中写module-info.java个文件,并且放置在与 Kotlin 文件相同的源根目录中。

    • Kotlin 编译器将正确限制依赖模块中非导出包中声明的可访问性。
    • 目前,没有计划在 Kotlin 中支持模块定义。

除此之外,大多数 Java 9-11 语言特性(var、REPL、流改进等)- 在 Kotlin 中已经存在了一段时间,因此使用 [=42 的主要直接好处=] 9-11 正在使用 JVM 进行优化,或模块系统/jlink(您可以按上述方式使用)

version 1.3.30 Kotlin now supports JVM bytecode targets 9, 10, 11, 12. (KT-26240 开始 - LppEdd 提到的门票 - 包含在内。)