Java "Lambda-Ausdrücke werden auf dieser Sprachebene nicht unterstützt"

199

Ich habe einige neue Funktionen von Java 8 getestet und das Beispiel wie hier gezeigt in meine IDE (ursprünglich Eclipse, dann IntelliJ) kopiert

Eclipse bot keinerlei Unterstützung für Lambda-Ausdrücke, und IntelliJ meldete weiterhin einen Fehler

Lambda-Ausdrücke werden auf dieser Sprachstufe nicht unterstützt

Ich möchte wissen, ob dies ein Problem mit meiner Installation, dem Code oder dem Support ist.

Czipperz
quelle
3
Es ist ein IDE-Problem. Sie müssen die Compiler-Konformität ändern.
Sotirios Delimanolis
6
Wählen Sie in IDEA Datei -> Projektstruktur. Sie haben die Möglichkeit, das Sprachniveau zu ändern
fge
1
@Czipperz: Markieren Sie auf SO den Titel nicht mit "Gelöst", markieren Sie die besten Antworten als "Akzeptiert", indem Sie auf das Häkchen klicken. Das belohnt den Antwortenden und zeigt, dass die Frage eine Antwort hat, die das Problem löst. Wenn keine Antwort die richtige Lösung ergibt, können Sie eine Selbstantwort veröffentlichen und diese dann als akzeptiert markieren (nach einer Wartezeit).
Lawrence Dol
Mögliches Duplikat von Wie verwende ich Java 8-Funktionen in Eclipse Luna?
Svetlin Zarev
@LawrenceDol Ich habe es so kommentiert, weil sie es nicht als Antwort, sondern als Kommentar gepostet haben.
Czipperz

Antworten:

344

In IntelliJ IDEA:

In File MenuProject StructureProject, ändern Project Language Levelzu8.0 - Lambdas, type annotations etc.

Für Android 3.0+ gehen Sie FileProject StructureModuleappund in der Registerkarte Eigenschaften Source Compatibilityund Target Compatibilityauf1.8 (Java 8)

Bildschirmfoto:

Geben Sie hier die Bildbeschreibung ein

Abhilash Divakaran
quelle
69
Hinweis aus der vorgeschlagenen Bearbeitung : Sie können auch das Sprachniveau für jedes Modul konfigurieren File Menu → Project Structure → Modules, aber standardmäßig entspricht es dem Sprachniveau des Projekts.
Benutzer1516873
6
Ich habe das gleiche Problem für Android Studio und keine der beiden Einstellungen in der oben erwähnten IDE gefunden. Irgendein Vorschlag !
CoDe
18
@ Shubh: Fügen Sie in Gradle diese Zeilen hinzu, Ihr Code funktioniert: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo
6
Nach dem Upgrade auf IntelliJ 15 musste ich die Projektsprachenstufe auf 9 und dann wieder auf 8 ändern , damit dies wirksam wurde.
Averasko
17
Diese Antwort ist veraltet. Unter Android 3.1.2 gehen Sie zu File-> Project Structure-> Module you want to support lambdasund setzen Sie Quellkompatibilität und Zielkompatibilität auf 1.8
Ivan
98

Sie sollten die Sprachstufe des Quellcodes auch auf der Registerkarte Quelle (Modulteil) ändern.

Sprachniveau ändern

user2682809
quelle
3
Ihre Antwort sollte höher sein oder zusammen mit anderen Antworten
muni764
2
+1. Die Priorität der Module ist höher als die des Projekts. Daher ziehe ich es vor, das Sprachniveau des Modulteils einzustellen.
Ge Liu
Dies beinhaltet nicht das Modul, das IntelliJ ebenfalls benötigt. Nicht verrückt nach dieser Seite von IntelliJ, zu viele Orte, um dasselbe zu überprüfen.
SpacePrez
Genial. Ich danke dir sehr. Das hat mir den Tag gerettet. Ich hatte mit dem Fehler zu kämpfen und war mir nicht sicher, was getan werden muss, um die Lambda-Ausdrücke zu aktivieren.
Siddhartha Thota
Ich habe eine Spring Boot-App ausgeführt und war mir nicht sicher, was schief gelaufen ist, nachdem ich mit der Verwendung von Lambda-Ausdrücken begonnen habe. Ich habe die Projekteinstellungen geändert, aber nachdem ich diese Moduleinstellung befolgt habe, hat es gut funktioniert.
Siddhartha Thota
75

Diese Lösung funktioniert in Android Studio 3.0 oder höher.

  1. Datei> Projektstruktur> Module> App> Registerkarte Eigenschaften

Geben Sie hier die Bildbeschreibung ein

Ändern Sie sowohl von Source Compatibilityals Target Compatibilityauch1.8

  1. Konfigurationsdatei bearbeiten

Sie können es auch direkt in der entsprechenden build.gradle-Datei konfigurieren

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
  }
}
Alen Lee
quelle
42

Ändern Sie für Intellij 13 einfach die Projektsprachenstufe selbst in die 8.0folgende Navigation.

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

java8

Modul lang Ebene

Ich musste auch aktualisieren, Modules lang levelwenn es kein Maven-Plugin für gab java compiler.

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

Module lang level

Dies Module lang levelwürde aber automatisch behoben, wenn es bereits eine maven plugindafür gibt,

    <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>

Nach Änderungen sieht alles gut aus

betenagupd
quelle
5
@Czipperz: Diese Antwort hat Bilder. Ich bevorzuge es, weil ich die bereits akzeptierte Antwort bereits an der Stelle angeschaut hatte, aber die Dropdown-Liste nicht bemerkte. Diese Antwort enthält Bilder, die die genaue Stelle hervorheben, an der sich die Option befindet.
ArtOfWarfare
2
Der Teil über die Datei pom.xml ist wirklich hilfreich, danke!
Kevin Zhao
3
Nach dem Ändern des Sprachniveaus auch für das Modul wurde mein Problem
behoben
23

In Android Studio Canary Build (3. +) können Sie Folgendes tun:

Datei -> Projektstruktur -> Im Abschnitt Module suchen gibt es Namen von Modulen Ihrer Klasse. Klicken Sie auf das Modul, in dem Sie Java auf Version 1.8 aktualisieren möchten. -> Ändern Sie "Quellkompatibilität" und "Zielkompatibilität" von 1,7 oder niedriger auf 1,8. Ändern Sie nichts anderes. -> Klicken Sie auf Übernehmen

Jetzt wird gradle erneut synchronisiert und Ihr Fehler wird entfernt.

Tarun
quelle
18

compileOptionsFügen Sie einfach in build.gradle Ihre App hinzu:

android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
Morozov
quelle
2
Google gab bekannt, dass sie Jack vor einigen Wochen ablehnen. Die Unterstützung für Java 8-
Sprachfunktionen
9

Für die neuesten Benutzer, die Android Studio 3.0.1 oder höher verwenden. Klicken Sie einfach auf Alt + Eingabetaste und aktualisieren Sie Ihr Sprachniveau auf 8.0 - Lambdas, geben Sie Anmerkungen usw. ein.

Vivek
quelle
einfach und besser als andere
Abhishek Singh
6

Wenn Sie in Sprache 5 nicht unterstützt werden , überprüfen Sie Folgendes: (Für mich war es im Abschnitt Module )

Lanaguge Level 5 wird nicht unterstützt

Kejsi Struga
quelle
4

7.0 unterstützt keine Lambda-Ausdrücke. Fügen Sie dies einfach Ihrem App-Gradle hinzu, um Ihr Sprachniveau auf 8.0 zu ändern:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

Geben Sie hier die Bildbeschreibung ein

Live-Liebe
quelle
2

Tatsächlich ist Eclipse-Unterstützung für Java 8 verfügbar: siehe hier und hier .

  • Für Kepler ist es als "Feature-Patch" gegen SR2 verfügbar (dh Eclipse 4.3.2).
  • Für Luna (Eclipse 4.4) wird es in der Standardversion sein. ( Release-Zeitplan )
Stephen C.
quelle
2

Kompilieren mit Java 8 (Lambdas usw.) in IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S oder Datei- / Projektstruktur

  • Öffnen Sie die Registerkarte Projekt

  • Stellen Sie das Project SDK auf die kompatible Java-Version (1.8) ein.

  • Stellen Sie die Sprachstufe des Projekts auf 8 ein

  • Öffnen Sie die Registerkarte Module

  • Stellen Sie die Sprachstufe auf 8 ein und klicken Sie auf OK

  • CTRL + ALT + S oder Datei / Einstellungen

  • Erstellen, Ausführen, Bereitstellen / Compiler / Java-Compiler

  • Ändern Sie die Zielbytecode-Version in 1.8 und klicken Sie auf OK

Daniel de Zwaan
quelle
2

Verwenden von: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

Das Ändern des Sprachniveaus über die Registerkarte Projekteinstellungen / Projekt hat nichts bewirkt. Drücken Sie stattdessen Alt+ Enterund wählen Sie "Sprachstufe auf 8 setzen - Lambdas, geben Sie Anmerkungen ein usw." und es löste sich automatisch auf.

Patrick Schaefer
quelle
1

Wie Stephen C betonte, unterstützt Eclipse Kepler (4.3) Java 8, wenn der Patch installiert wird (Installationsanweisungen hier ).

Nach der Installation müssen Sie Ihren Projekten mitteilen, dass sie Java 8 verwenden sollen. Fügen Sie zuerst das JDK zu Eclipse hinzu:

  • Gehen Sie zu Fenster -> Einstellungen
  • Gehen Sie zu Java -> Installierte JREs
  • Fügen Sie die Standard-VM hinzu und zeigen Sie auf den Speicherort der JRE
  • Dann gehen Sie zu Compiler
  • Setzen Sie die Compiler-Konformitätsstufe auf 1,8

Weisen Sie das Projekt dann an, JDK 1.8 zu verwenden:

  • Gehen Sie zu Projekt -> Einstellungen
  • Gehen Sie zu Java Compiler
  • Aktivieren Sie projektspezifische Einstellungen
  • Setzen Sie die Compiler-Konformitätsstufe auf 1,8
Gijs Overvliet
quelle
1

Überprüfen Sie die folgenden Einstellungen:

  1. Datei-> Projektstruktur-> Registerkarte Projekt.

    *Project SDK should be set to 8 or above.*
  2. Datei-> Projektstruktur-> Module.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Datei-> Einstellungen (oder Andere Einstellungen-> Einstellungen für neue Projekte in einer neueren Ideenversion)

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

Ihr Problem kann in eine der oben definierten Kategorien fallen.

Nitesh Kumar Thakur
quelle
1

Das gleiche Projekt ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') funktioniert auf dem neuen schnellen Windows - Rechner und unterstreichtJava 8 Sachen durch rote Farbe auf dem alten Ubuntu 18.04 Laptop (jedoch Projekt ohne Fehler auf Ubuntu kompilieren).

Die einzigen zwei Dinge, die ich geändert habe, um es zu zwingen, nicht mehr durch Rot zu unterstreichen, waren Ausschluss von incremental true unddexOptions

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

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

in der app- Ebene build.gradle.

ist abwesend
quelle
0

In Intellij 14 haben die folgenden Einstellungen für mich funktioniert. Intellij14-Einstellungen

user5760784
quelle
0

Selbst nach dem Anwenden der oben definierten projektspezifischen Einstellungen auf IntelliJ und Eclipse schlug dies für mich immer noch fehl!

Was für mich funktioniert hat, war das Hinzufügen eines Maven-Plugins mit Quelle und Ziel mit der Einstellung 1.8 in 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> 
Dean Jain
quelle
0

Mögliche Ursache Nr. 1 (wie die ersten drei Antworten auf diese Frage): Projektstruktureinstellungen

  1. Datei> Projektstruktur> Gehen Sie unter Projekteinstellungen zu Projekt> setzen Sie das Projekt-SDK auf 1,8 (mit Version 65 oder höher, spätestens 112) und setzen Sie die Projektsprachenstufe auf 8.

  2. Datei> Projektstruktur> Gehen Sie unter Plattformeinstellungen zu Projekt> stellen Sie sicher, dass Ihr JDK-Ausgangspfad auf 1,8 festgelegt ist (ab Version 65 ist die neueste Version 112).

Wenn dies nicht funktioniert, überprüfen Sie die Ziel-Bytecode-Version Ihres Compilers und fahren Sie mit der möglichen Ursache Nr. 2 fort.

Mögliche Ursache Nr. 2: Compiler

  1. Datei> Einstellungen> Erstellen, Ausführen, Bereitstellen> Gehen Sie unter Compiler zu Java Compiler> setzen Sie Ihre Projekt-Bytecode-Version auf 1.8 sowie die gesamte Ziel-Bytecode-Version für Ihre Module. Klicken Sie auf Übernehmen und klicken Sie auf OK . Starten Sie Ihre IntelliJ IDE neu. Zu diesem Zeitpunkt wurde der Lambda-Ausdruck in meiner IDE akzeptiert.

Die besten Wünsche :)

kuzevni
quelle
2
Das war vor fast drei Jahren.
Czipperz
Dies ist für Leute, die Google verwenden, um nach bereits gelösten Problemen zu suchen. Leute, die in der Branche arbeiten, wissen das.
Kuzevni
0

Für mich hat keine der angebotenen Lösungen funktioniert.

Dies sollte Ihr letzter Ausweg sein: -> Öffnen Sie die IML-Datei Ihres Projekts und ändern Sie LANGUAGE_LEVEL in JDK_1_8 oder eine beliebige Version. -> Wenn dies nicht geholfen hat, sollten Sie "JDK" in Ihrem Projektstammverzeichnis suchen und die Datei mit den Versionseinstellungen suchen und auf Ihre bevorzugte Version einstellen.

Pruthvidhar Rao Nadunooru
quelle
-1

Strg + Alt + Umschalt + S und dann aus dem Projekt die Sprachstufe 1.8 auswählen. Weitere Informationen zu Lambda-Ausdrücken finden Sie hier

Toseef Zafar
quelle
-1

Unterstützung von Ecplise für Lambda-Ausdrücke:

  1. Stellen Sie sicher, dass Sie JDK 1.8 verwenden (Fenster> Einstellungen> Installierte JREs und Compiler).
  2. Verwenden Sie die Annotation @FunctionalInterface, wenn Sie neue funktionale Schnittstellen definieren, sodass Eclipse Ihnen Refactorings für Lambdas ( Functional Interfaces ) vorschlägt .
Mehdi
quelle
-1

Überprüfen Sie zunächst die von Ihnen verwendete JDK-Version. Sie sollte höher als 1,8 sein.

Wenn dies der Fall ist, fahren Sie mit den folgenden Schritten fort.

Ändern Sie die Sprachstufe des Projekts und der Module in Intellij .

Projekt

1.Datei-> Projektstruktur-> Projekt-> Projektsprachenebene Ändern Sie diese in 8, damit Lamba-Ausdrücke funktionieren

2.Datei-> Projektstruktur-> Modul-> Projektsprachenebene Ändern Sie diese in 8, damit Lamba-Ausdrücke funktionieren

Abhishek Tiwari
quelle
-1

Diese Antwort funktioniert nicht für neue aktualisierte Intelligenz ... für neue Intelligenz.

Gehen Sie zu -> Datei -> Projektstruktur -> Globale Bibliotheken ==> auf JDK 1.8 oder höher eingestellt.

auch Datei -> Projektstruktur ---> Projekte ===> "Projektsprachenhandbuch" auf 8 setzen

auch Datei -> Projektstruktur ---> Projekt SDK ==> 1.8

Dies sollte den Lambda-Ausdruck für Ihr Projekt aktivieren.

Abhijit
quelle