【发布时间】:2020-02-23 22:13:05
【问题描述】:
由于某种原因,尽管语言级别为 13,但我无法使用关键字 var。
Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
设置为 13。
我正在使用 JVM 语言目标设置为 1.8 的 gradle
我检查并尝试了:
【问题讨论】:
-
你检查过项目设置(不仅是全局设置)吗?
由于某种原因,尽管语言级别为 13,但我无法使用关键字 var。
Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
设置为 13。
我正在使用 JVM 语言目标设置为 1.8 的 gradle
我检查并尝试了:
【问题讨论】:
你没有说你使用的是什么 IDE,但我猜是 IntelliJ。您也没有在 IntelliJ 中显示 Gradle 配置,所以我假设您使用默认设置并且它是一个相对较新的版本。
您可以选择让 IntelliJ 编译您的源代码,或者让 Gradle 来编译。默认是 Gradle,所以你如何配置 IntelliJ 编译器并不重要,因为它不被使用。
如果您不分叉 Gradle 编译,它将使用与运行 Gradle 相同的 JDK 进行编译。在 IntelliJ 中,这是在 Build Tools -> Gradle 下的 Gradle JVM 设置中配置的(如果从 CLI 运行,则为 JAVA_HOME)。
现在回到你的问题。不能使用 var 关键字的原因正是因为您已将其配置为面向 Java 8。这意味着源代码还必须与 Java 8 兼容。如果您考虑一下,更新的语言功能通常需要更新的版本的字节码。因此,如果您需要最终的二进制文件与 Java 8 兼容,那么您的源代码也需要与 Java 8 兼容。
您仍然可以使用 Java 13 编译为 Java 8 字节代码(只要您针对 Java 8 API 和语法进行编程)。但不仅仅是“目标”版本,您应该使用--release 标志,因为这也将正确配置bootclasspath,我猜您没有这样做(这确保您使用正确的API)。例如:
compileJava {
options.compilerArgs.addAll(['--release', '8'])
}
【讨论】: