java - Java 13 - 不能使用 `var` 关键字
问题描述
var
出于某种原因,尽管语言级别为 13,但我无法使用该关键字。
Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
设置为 13。
我正在使用 JVM 语言目标设置为 1.8 的 gradle
我检查并尝试了:
解决方案
你没有说你使用的是什么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'])
}
推荐阅读
- neo4j - 仅将具有多个(冗余)路径的节点返回到 Neo4j(Cypher)中的不同节点
- django - Django 动态表单多对多字段
- android - Android Studio 3.3.2 布局更改不起作用
- java - 不兼容的类型:列出 CSVRecords java
- javascript - Algolia ./docsearch run failed: AlgoliaException: Invalid Application-ID or API key
- android - Android Camera2帧水平反转
- angular - 在 Angular 7 中手动包含库 fontawesome Pro
- certificate - 即使正确生成了 acme.json 文件,Traefik 仍在使用默认证书
- c++ - c++中类的定义和访问标识符
- voice-recognition - 如何将私人 GitHub 存储库中的代码导入到 snips 中?