首页 > 解决方案 > Java 13 - 不能使用 `var` 关键字

问题描述

var出于某种原因,尽管语言级别为 13,但我无法使用该关键字。

Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler

设置为 13。

我正在使用 JVM 语言目标设置为 1.8 的 gradle

我检查并尝试了:

在 jdk 11 中使用“var”时的编译时问题

如何避免 IntelliJ 重置语言级别?

标签: javagradle

解决方案


你没有说你使用的是什么IDE,但我猜是IntelliJ。您也没有在 IntelliJ 中显示 Gradle 配置,所以我假设您使用默认设置并且它是一个相对较新的版本。

你可以选择让 IntelliJ 编译你的源代码,或者让 Gradle 来做。默认是 Gradle,所以你如何配置 IntelliJ 编译器并不重要,因为它没有被使用。

如果您不分叉 Gradle 编译,它将使用与运行 Gradle 相同的 JDK 进行编译。在 IntelliJ 中,这是在下面的Gradle JVM设置中配置的Build Tools -> Gradle(或者JAVA_HOME如果您从 CLI 运行它)。

现在回到你的问题。不能使用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'])
}

推荐阅读