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


200

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

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

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

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


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

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

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


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

Відповіді:


349

В 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, але за замовчуванням він буде таким самим, як рівень мови проекту.
користувач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.