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

如果我们想要确保我们的代码在所有浏览器版本中运行,使用JavaScript,我们可以使用Babel 。 有没有像Java这样的东西,我们可以在Java 9中编写我们的代码,但它会运行在Java 6运行时?

例如,Kotlin可以指定多个JVM运行时版本吗?

我希望像Kotlin这样的产品能够瞄准多个JVM运行时间 – 我想我们现在只需要做个梦想。

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

由Kotlin生成的字节码通常保持不变,与目标JVM版本无关。 一个例外是,如果你设置了一个编译器选项jvmTarget = "1.8" ,那么编译器可能(或不可能)使用JDK8的某些特性作为优化。

恕我直言,这个问题得到了所有的缺点,因为它是多么意外。 像Babel这样的工具对JavaScript来说是独一无二的,因为在所有其他语言中,它们被称为编译器 由于JS决定可以不用编译器,所以我在部署方面有这样的问题。 Java的后端移植工具(非常有限),但它们只是编译器的插件。 Kotlin没有任何功能,因为它的开发独立于JDK,并且必须支持1.6以上的所有以前的JDK版本。

综上所述,如果您使用Kotlin进行JVM或JS开发,您的梦想就会实现 – 您可以使用任何版本的Kotlin,包含任何JVM库,可能位于ES5.1之上的任何JS库,并获得一致的运行时表示。

有一个非官方的库retrolambda ,它将Java 8特性的lambda expression编译成Java 6 (就像Babel一样)。

我想你会喜欢它,这里是: https : //github.com/orfjackal/retrolambda