Java "лямбда-вирази, які не підтримуються на цьому мовному рівні"


200

Я тестував деякі нові можливості Java 8 і скопіював приклад у свій IDE (спочатку Eclipse, потім IntelliJ), як показано тут

Eclipse не запропонував жодної підтримки для лямбда-виразів, і IntelliJ продовжував повідомляти про помилку

Лямбда-вирази не підтримуються на цьому мовному рівні

Я хотів би знати, чи це проблема з моєю установкою, кодом або підтримкою.


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

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

1
@Czipperz: На ТАК не коментуйте назву "Розв’язано", кращі відповіді позначайте як "Прийнято", натиснувши галочку. Це нагороджує відповідача і показує, що питання має відповідь, яка вирішує проблему. Якщо жодна відповідь не дає правильного рішення, ви можете опублікувати відповідь, а потім позначте її прийнятою (після періоду очікування).
— Лоуренс Дол


@LawrenceDol Я так зазначив це, оскільки не розміщував це як відповідь, а як коментар.
— Czipperz

Відповіді:


349

В IntelliJ IDEA:

У File Menu→ Project Structure→ Project, змініть Project Language Levelна8.0 - Lambdas, type annotations etc.

Для Android 3.0 + Go File→ Project Structure→ Module→ appі в Properties Tab набору Source Compatibilityі Target Compatibilityдо1.8 (Java 8)

Знімок екрана:

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


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

6
Я стикаюся з тією ж проблемою для Android Studio, і жоден параметр не знайдено в IDE, який ви згадували вище. Будь-яка пропозиція!
— CoDe

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та встановіть сумісність із джерелами та цільову сумісність на 1,8
— Іван

100

Ви повинні змінити вихідний код Рівень мови також на вкладці Джерело (частина модулів).

Зміна рівня мови


3
Ваша відповідь повинна бути вищою або разом з іншими відповідями
— muni764,

2
+1. Пріоритет модулів вище, ніж у проекту. Тому я віддаю перевагу встановленню рівня мови частини модулів.
— Ге Лю

Це не включає модуль, якого вимагає також IntelliJ. Не божевільна ця сторона IntelliJ, занадто багато місць, щоб перевірити те саме.
— SpacePrez

Дивовижно. Дуже дякую. Це врятувало мені день. Я боровся з помилкою, не знаючи, що потрібно зробити, щоб включити лямбда-вирази.
— Сіддхартха Тота

Я запускав весняний завантажувальний ап, і не впевнений, що пішло не так після того, як я почав використовувати лямбда-вирази, я змінив налаштування проекту, але після виконання цієї настройки модулів він працював чудово.
— Сіддхартха Тота

76

Це рішення працює в 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
  }
}

43

Для 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

Модулі рівня мов

Але це 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

24

У студії Android canary build (3. +) ви можете зробити наступне:

Файл -> Структура проекту -> Подивіться у розділі Модулі, є назви модулів вашого класу. Клацніть на модуль, у якому потрібно оновити java до версії 1.8. -> Змініть "Сумісність із джерелами" та "Цільова сумісність" на 1,8 з 1,7 або нижче. Не змінюйте нічого іншого. -> Клацніть Застосувати

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


19

Просто додайте 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 Попередній перегляд 4. Подивіться тут
— nilsi

10

Для останніх користувачів, які використовують Android студію 3.0.1 або вище. Просто натисніть Alt + Введіть і оновіть рівень мови до 8.0 - лямбда, введіть анотації тощо.


легкий і кращий за інших
— Абхішек Сінгх

7

Якщо ви не отримуєте підтримку на мові 5 , перевірте це: (Для мене це було в розділі Модулі )

Lanaguge 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 до затемнення:

  • Перейдіть у вікно -> Налаштування
  • Перейдіть на Java -> Встановлені JRE
  • Додайте стандартний VM та вкажіть місце розташування 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. Файл-> Налаштування (або Інші настройки-> Налаштування нових проектів у новій версії ідеї)

    *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. Файл> Структура проекту> У розділі Налаштування проекту перейдіть до проекту> встановіть пакет SDK проекту на 1,8 (у версії 65 або вище, остання - 112) та встановіть рівень мови проекту на 8.

  2. Файл> Структура проекту> У розділі Налаштування платформи перейдіть до Проекту> переконайтесь, що для домашнього шляху JDK встановлено значення 1,8 (для версії 65 або вище, остання - 112).

Якщо вищезгадане не працює, перевірте цільову версію байт-коду компілятора та перейдіть до Можливої ​​причини №2.

Можлива причина №2: Компілятор

  1. Файл> Налаштування> Збірка, виконання, розгортання> У розділі Компілятор перейдіть до Java-компілятора> встановіть свою версію байт- коду проекту на 1,8, а також усі цільові версії байтового коду для ваших модулів. Клацніть Застосувати і натисніть ОК . Перезавантажте свій IntelliJ IDE. В цей момент в моєму IDE було прийнято лямбда-вираз.

Найкращі побажання :)


2
Це було майже три роки тому.
— Czipperz

Це для людей, які використовують Google, щоб перевірити наявність уже вирішених проблем. Люди, які працюють у галузі, це знають.
— kuzevni

0

Для мене жодне із запропонованих рішень не спрацювало.

Це має бути останньою інстанцією: -> Відкрити .iml файл свого проекту, змінити LANGUAGE_LEVEL на JDK_1_8 або будь-яку іншу версію. -> Якщо це не допомогло, слід скопіювати "JDK" у кореневому каталозі вашого проекту та знайти файл, який містить налаштування версії, та встановіть його у вибраній версії.



-1

Щоб мати підтримку Ecplise для лямбда-виразів:

  1. Переконайтеся, що ви використовуєте JDK 1.8 (Вікно> Налаштування> Встановлені JRE та компілятор);
  2. Використовуйте примітку @FunctionalInterface, якщо ви визначаєте будь-які нові функціональні інтерфейси, щоб затемнення запропонувало вам переробити пов'язані з Лямбда ( функціональні інтерфейси ).

-1

Спочатку перевірте використану вами версію JDK, вона повинна перевищувати 1,8.

Якщо це так, перейдіть до наступних кроків.

Змінити рівень мови проекту та модулів в Intellij .

Проект

1.File-> Структура проекту-> Проект-> Рівень мови проекту Змініть його на 8, щоб вирази лямби працювали

2.File-> Структура проекту-> Модуль-> Рівень мови проекту Змініть його на 8, щоб вирази лямби працювали


-1

ця відповідь не працює для нового оновленого intelliJ ... для нового intelliJ ..

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

також Файл -> Структура проекту ---> Проекти ===> встановіть "посібник з мов проекту" на 8

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

Це повинно включати лямбда-вираз для вашого проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.