Java 是否存在类似 Babel 的编译器?

Does there exist a Babel like compiler for Java?

使用 javascript 如果我们想确保我们的代码 运行 在所有浏览器版本中都可以使用 Babel。 Java 是否有类似的东西,我们可以在 Java 9 中编写代码,但它会在 Java 6 运行 时间内 运行?

例如,Kotlin 可以针对多个 JVM 运行time 版本吗?

I was hoping for something like Kotlin to target multiple JVM runtimes - I guess we just have to dream for now.

您可以将 Kotlin 代码编译为 JDK6、JDK7、JDK8、JDK9 或 JDK 以上的任何 JDK ]6。这就是支持 Java 1.6 级别字节码的含义。 Kotlin 的所有功能将保持不变,但库除外,它可能需要不同的 JDK 版本。

Kotlin 生成的字节码通常会独立于目标 JVM 版本而保持不变。一个例外是,如果您设置编译器选项 jvmTarget = "1.8",则编译器可能(或可能不会)使用 JDK8 的某些功能作为优化。

恕我直言,这个问题有很多缺点,因为它太出乎意料了。像 Babel 这样的工具是 JavaScript 所独有的,因为在所有其他语言中,它们都被称为编译器。由于 JS 决定它可以在没有编译器的情况下运行,所以我在部署时遇到了这样的问题。 Java 有(非常有限的)向后移植工具,但它们只是编译器的插件。 Kotlin 没有,因为它的开发是独立于 JDK 的,它必须支持所有以前的 JDK 1.6 以上的版本。

总而言之,如果你使用 Kotlin 进行 JVM 或 JS 开发,你的梦想就实现了——你可以使用任何版本的 Kotlin,任何 JVM 库,可能是任何高于 ES5.1 的 JS 库,并得到一致的运行时表示。

有一个非官方库 retrolambdaJava 8 特性 lambda expression 编译成 Java 6(就像 Babel)。

I guess you will enjoy it, and here it is: https://github.com/orfjackal/retrolambda

你可以查看teaVM! http://teavm.org/ 还有 dukeScript