Java 13 - Невозможно использовать ключевое слово `var` - PullRequest
0 голосов
/ 24 февраля 2020

По какой-то причине я не могу использовать ключевое слово var несмотря на то, что он находится на языковом уровне 13.

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

Установлено на 13.

Я использую Gradle с целями языка JVM установить на 1,8

Я проверил и попробовал:

проблема во время компиляции при использовании "var" в jdk 11

Как избежать IntelliJ для сброса уровня языка?

1 Ответ

1 голос
/ 24 февраля 2020

Вы не сказали, какую IDE вы используете, но я предполагаю, что IntelliJ. Вы также не отображали конфигурацию Gradle в IntelliJ, поэтому я предполагаю, что вы используете настройки по умолчанию и это относительно новая версия.

Вы можете выбрать между компиляцией исходного кода IntelliJ или разрешением Gradle сделать это. По умолчанию используется Gradle, поэтому не имеет значения, как настроить компилятор IntelliJ, так как он не используется.

Если вы не разветвляете компиляцию Gradle, он будет использовать тот же JDK для компиляции, что и для запуска Gradle. В 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'])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...