【问题标题】:Java 13 - Can't use `var` keywordJava 13 - 不能使用 `var` 关键字
【发布时间】:2020-02-23 22:13:05
【问题描述】:

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

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

设置为 13。

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

我检查并尝试了:

problem in compile time when using "var" in jdk 11

How to avoid IntelliJ to reset language level?

【问题讨论】:

  • 你检查过项目设置(不仅是全局设置)吗?

标签: java gradle


【解决方案1】:

你没有说你使用的是什么 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'])
}

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2022-12-31
    • 2013-09-04
    • 2015-07-21
    • 2015-12-01
    • 1970-01-01
    • 2015-04-02
    • 2018-09-09
    • 2013-04-19
    相关资源
    最近更新 更多