Java «лямбда-выражения не поддерживаются на этом уровне языка»


199

Я тестировал некоторые новые функции Java 8 и скопировал пример в мою IDE (изначально Eclipse, затем IntelliJ), как показано здесь

Eclipse не предложила никакой поддержки лямбда-выражений, а IntelliJ продолжал сообщать об ошибке

Лямбда-выражения не поддерживаются на этом уровне языка

Я хотел бы знать, если это проблема с моей установкой, кодом или поддержкой.


3
Это проблема IDE. Вы должны изменить соответствие компилятора.
Сотириос Делиманолис

6
В IDEA выберите Файл -> Структура проекта; у вас будет возможность изменить уровень языка
fge

1
@Czipperz: На SO не отмечайте заголовок «Решено», отметьте лучшие ответы как «Принятые», нажав на галочку. Это вознаграждает ответчика и показывает, что у вопроса есть ответ, который решает проблему. Если ни один ответ не дает правильного решения, вы можете опубликовать свой ответ и пометить его как принятый (после периода ожидания).
Лоуренс Дол


@LawrenceDol Я аннотировал это так, потому что они не публиковали это как ответ, но как комментарий.
Чипперз

Ответы:


347

В IntelliJ IDEA:

В File MenuProject StructureProjectизменить Project Language Levelна8.0 - Lambdas, type annotations etc.

Для Android 3.0+ Go FileProject StructureModuleappи в Properties Tab набора Source Compatibilityи Target Compatibilityк1.8 (Java 8)

Скриншот:

введите описание изображения здесь


69
Примечание от предлагаемого редактирования : Вы также можете настроить уровень языка для каждого модуля File Menu → Project Structure → Modules, но по умолчанию он будет таким же, как уровень языка проекта.
user1516873

6
Я столкнулся с той же проблемой для Android Studio, и ни одна из них не нашла те же настройки в IDE, о которых вы упоминали выше Любое предложение !
Код

18
@Shubh: В Gradle, добавьте эти строки, ваш код будет работать: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
После обновления до IntelliJ 15 мне пришлось изменить уровень языка проекта до 9, а затем вернуться к 8, чтобы это вступило в силу.
Авераско

17
Этот ответ устарел. На Android 3.1.2 перейдите на File-> Project Structure-> Module you want to support lambdasи установите Source Compatibility и Target Compatibility на 1.8
Иван

98

Вы должны изменить исходный код Language Level также на вкладке Source (часть Modules).

Изменить уровень языка


3
Ваш ответ должен быть выше или вместе с другими ответами
muni764

2
+1. Приоритет модулей выше, чем у проекта. Поэтому я предпочитаю устанавливать уровень языка для части модулей.
Ge Liu

Это не включает модуль, который также требуется IntelliJ. Не без ума от этой стороны IntelliJ, слишком много мест, чтобы проверить одно и то же.
SpacePrez

Потрясающие. Огромное спасибо. Это спасло мой день. Я боролся с ошибкой, не зная, что нужно сделать, чтобы включить лямбда-выражения.
Сиддхартха Тота

Я запускал весеннюю загрузку ap, и не уверен, что пошло не так после того, как я начал использовать лямбда-выражения, я изменил настройки проекта, но после следования настройкам этого модуля, он работал нормально.
Сиддхартха Тота

75

Это решение работает в Android Studio 3.0 или более поздней версии.

  1. Файл> Структура проекта> Модули> приложение> вкладка Свойства

введите описание изображения здесь

Изменить оба Source Compatibilityи Target Compatibilityна1.8

  1. Изменить файл конфигурации

Вы также можете настроить его непосредственно в соответствующем файле build.gradle

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

42

Для intellij 13, просто измените сам уровень языка проекта на 8.0следующую навигацию.

File
|
|
 ---------Project Structure -> Project tab
          |
          |________Project language level

java8

Уровень языка модуля

Мне также пришлось обновить, Modules lang levelкогда не было Maven плагин для java compiler.

File
|
|
 ---------Project Structure -> Modules tab
          |
          |________ language level

Модули уровня lang

Но это Module lang levelбудет автоматически исправлено, если для этого уже есть maven plugin,

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>

После изменений все выглядит хорошо


5
@Czipperz: у этого ответа есть картинки. Я предпочитаю это, потому что я фактически уже посмотрел на место упомянутого принятого ответа, но не заметил выпадающий список. В этом ответе есть картинки, подчеркивающие точное место, где находится опция.
ArtOfWarfare

2
часть о файле pom.xml действительно полезна, спасибо!
Кевин Чжао

3
После изменения уровня языка также для модуля исправлена ​​моя проблема
nihasmata

23

В Android Studio Canary build (3. +) вы можете сделать следующее:

Файл -> Структура проекта -> Посмотрите в разделе Модули, там есть названия модулей вашего класса. Нажмите на модуль, в котором вы хотите обновить Java до версии 1.8. -> Измените «Совместимость источника» и «Целевая совместимость» на 1,8 с 1,7 или ниже. Больше ничего не меняй. -> Нажмите Применить

Теперь Gradle будет синхронизироваться, и ваша ошибка будет удалена.


18

Просто добавьте compileOptionsв build.gradle ваше приложение:

android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

2
Google объявил, что они осуждают Джека несколько недель назад. Поддержка языковых функций Java 8 теперь изначально обеспечивается плагином Android Gradle, начиная с Android Studio 2.4 Preview 4. Смотрите здесь
nilsi

9

Для последних пользователей, использующих Android studio 3.0.1 или выше. Просто нажмите Alt + Enter и обновите свой уровень языка до 8.0 - лямбды, введите аннотации и т. Д.


легко и лучше, чем другие
Абхишек Сингх

6

Если вы получаете не поддерживается на языке 5 , проверьте это: (Для меня это было в разделе Модули )

Lanaguge Level 5 не поддерживается


5

7.0 не поддерживает лямбда-выражения. Просто добавьте это в приложение, чтобы изменить уровень языка на 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

введите описание изображения здесь


2

На самом деле, поддержка Eclipse для Java 8 доступна: смотрите здесь и здесь .

  • Для Kepler он доступен в виде «функционального патча» для SR2 (т. Е. Eclipse 4.3.2).
  • Для Luna (Eclipse 4.4) это будет в стандартной версии. ( график релизов )

2

Компилировать с Java 8 (лямбды и т. Д.) В IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S или файл / структура проекта

  • Открыть вкладку проекта

  • Установите Project SDK на совместимую версию Java (1.8)

  • Установите уровень языка проекта на 8

  • Открыть вкладку Модули

  • Установите уровень языка на 8, нажмите ОК

  • CTRL + ALT + S или Файл / Настройки

  • Сборка, выполнение, развертывание / компилятор / компилятор Java

  • Измените целевую версию байт-кода на 1.8, нажмите ОК


2

Использование: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

Изменение уровня языка через вкладку «Настройки проекта» / «Проект» ничего не дало. Вместо этого нажмите Alt+ Enterи выберите «Установить уровень языка 8 - лямбда-выражения, примечания типа и т. Д.» и это решается автоматически.


1

Как отметил Стивен С., Eclipse Kepler (4.3) имеет поддержку Java 8 при установке патча (инструкции по установке здесь )

После установки вам нужно указать вашим проектам использовать java 8. Сначала добавьте JDK в eclipse:

  • Перейти в окно -> Настройки
  • Перейти к Java -> Установленные JRE
  • Добавьте стандартную виртуальную машину и укажите местоположение JRE
  • Затем перейдите к компилятору
  • Установите уровень соответствия компилятора на 1,8

Затем скажите проекту использовать JDK 1.8:

  • Перейти к проекту -> настройки
  • Перейти к компилятору Java
  • Включить настройки проекта
  • Установите уровень соответствия компилятора на 1,8

1

Проверьте настройки ниже:

  1. Файл-> Структура проекта-> Вкладка Проект.

    *Project SDK should be set to 8 or above.*
  2. Файл-> Структура проекта-> Модули.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Файл-> Настройки (или Другие настройки-> Настройки новых проектов в новой версии Idea)

    *Search for Java compiler and check if Project byte code version 
    and per module byte code version is set 8 or above.*

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


1

Тот же проект ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') работает отлично на новой быстрой машине Windows , и подчеркивание Java 8материала красного цвета на старом Ubuntu 18.04 ноутбука (однако проект компиляции без ошибок на Ubuntu).

Единственные две вещи, которые я изменил, чтобы заставить его перестать подчеркивать красным, были исключением incremental trueиdexOptions

compileOptions {
//    incremental true
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

//dexOptions {
//    javaMaxHeapSize "4g"
//}

на app- уровне build.gradle.



0

Даже после применения определенных выше специфичных для проекта настроек на IntelliJ, а также на Eclipse, он все равно не удался!

у меня сработало добавление плагина maven с исходными и целевыми настройками 1.8 в POM XML:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.abc.sparkcore.JavaWordCount</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>   
     </execution>
            </executions>
        </plugin>
    </plugins>
</build> 

0

Возможная причина №1 (такая же, как первые 3 ответа на этот вопрос): настройки структуры проекта

  1. Файл> Структура проекта> В разделе «Параметры проекта» перейдите в «Проект»> установите Project SDK равным 1,8 (с версией 65 или выше, последняя версия - 112) и установите « Уровень языка проекта» на 8.

  2. Файл> Структура проекта> В разделе «Настройки платформы» перейдите в «Проект»> и убедитесь, что домашний путь JDK установлен на 1,8 (с версией 65 или выше, последняя версия - 112).

Если вышеперечисленное не работает, проверьте целевую версию байт-кода вашего компилятора и перейдите к «Возможная причина №2».

Возможная причина № 2: компилятор

  1. Файл> Настройки> Построение, Выполнение, Развертывание> В разделе «Компилятор» перейдите в «Компилятор Java»> установите для версии байт-кода проекта значение 1,8, а также всю версию целевого байт-кода для ваших модулей. Нажмите Применить и нажмите ОК . Перезагрузите вашу IntelliJ IDE. Лямбда-выражение было принято в моей IDE в этот момент.

С наилучшими пожеланиями :)


2
Это было почти три года назад.
Чипперз

Это для людей, использующих Google для проверки уже решенных проблем. Люди, которые работают в отрасли, знают это.
Кузевни

0

Для меня ни одно из предложенных решений не сработало.

Это должно быть вашим последним средством: -> Откройте файл .iml вашего проекта, измените LANGUAGE_LEVEL на JDK_1_8 или любую другую версию, которую вы пожелаете. -> Если это не помогло, вы должны выполнить grep «JDK» в корневой директории вашего проекта и найти файл, который содержит настройку версии, и установить его на предпочитаемую версию.



-1

Для поддержки Ecplise для лямбда-выражений:

  1. Убедитесь, что вы используете JDK 1.8 («Окно»> «Установки»> «Установленные JRE и компилятор»);
  2. Используйте аннотацию @FunctionalInterface, если вы определяете какие-либо новые функциональные интерфейсы, чтобы eclipse предложила вам рефакторинги, связанные с Lambdas ( функциональными интерфейсами ).

-1

Сначала проверьте версию JDK, которую вы используете, она должна быть выше, чем 1.8.

Если это так, выполните следующие действия.

Изменить уровень языка проекта и модулей в Intellij .

проект

1.Файл-> Структура проекта-> Проект-> Уровень языка проекта Измените его на 8, чтобы выражения lamba работали

2. Файл-> Структура проекта-> Модуль-> Уровень языка проекта Измените его на 8, чтобы выражения lamba работали


-1

этот ответ не работает для нового обновленного intelliJ ... для нового intelliJ ..

Перейдите в -> файл -> Структура проекта -> Глобальные библиотеки ==>, чтобы установить версию JDK 1.8 или выше.

также Файл -> Структура проекта ---> Проекты ===> установите "Руководство по языку проекта" на 8

также Файл -> Структура проекта ---> Проект SDK ==> 1.8

Это должно включить лямбда-выражение для вашего проекта.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.