Java „wyrażenia lambda nie są obsługiwane na tym poziomie językowym”


198

Testowałem nowe funkcje Java 8 i skopiowałem przykład do mojego IDE (początkowo Eclipse, potem IntelliJ), jak pokazano tutaj

Eclipse nie oferował żadnej obsługi wyrażeń lambda, a IntelliJ ciągle zgłaszał błąd

Wyrażenia lambda nie są obsługiwane na tym poziomie języka

Chciałbym wiedzieć, czy jest to problem z moją instalacją, kodem lub wsparciem.


3
To problem IDE. Musisz zmienić zgodność kompilatora.
Sotirios Delimanolis

6
W IDEA wybierz Plik -> Struktura projektu; będziesz mieć możliwość zmiany poziomu języka
fge

1
@Czipperz: Na SO nie dodawaj adnotacji do tytułu „Rozwiązane”, zaznacz najlepsze odpowiedzi jako „Zaakceptowane”, klikając znacznik. To nagradza odpowiadającego i pokazuje, że pytanie ma odpowiedź, która rozwiązuje problem. Jeśli żadna odpowiedź nie daje właściwej rozdzielczości, możesz opublikować odpowiedź własną, a następnie oznaczyć ją jako zaakceptowaną (po okresie oczekiwania).
Lawrence Dol


@LawrenceDol Tak to zaznaczyłem, ponieważ nie opublikowali go jako odpowiedzi, ale jako komentarz.
Czipperz

Odpowiedzi:


344

W IntelliJ IDEA:

W File MenuProject StructureProjectzmień Project Language Levelna8.0 - Lambdas, type annotations etc.

Android 3.0+ Go FileProject StructureModuleappi własnościach Tab zestawu Source Compatibilityi Target Compatibilitydo1.8 (Java 8)

Zrzut ekranu:

wprowadź opis zdjęcia tutaj


69
Uwaga z proponowanej edycji : Możesz także skonfigurować poziom języka dla każdego modułu File Menu → Project Structure → Modules, ale domyślnie będzie on taki sam, jak poziom języka projektu.
user1516873

6
Mam do czynienia z tym samym problemem dla Androida Studio i nie znalazłem tych samych ustawień w IDE, o którym wspomniałeś powyżej. Jakieś sugestie !
CoDe,

18
@Shubh: W Gradle dodaj te wiersze, Twój kod będzie działał: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
Po aktualizacji do IntelliJ 15 musiałem zmienić poziom języka projektu do 9, a następnie z powrotem na 8, aby to zadziałało.
averasko,

17
Ta odpowiedź jest nieaktualna. W Androidzie 3.1.2 przejdź do File-> Project Structure-> Module you want to support lambdasi ustaw Zgodność źródła i Zgodność docelową na 1.8
Ivan

98

Powinieneś zmienić kod źródłowy Poziom języka także na zakładce Źródło (część Moduły).

Zmień poziom języka


3
twoja odpowiedź powinna być wyższa lub razem z innymi odpowiedziami
muni764

2
+1. Priorytet modułów jest wyższy niż priorytet projektu. Wolę więc ustawić poziom języka części modułów.
Ge Liu,

Nie obejmuje to modułu wymaganego również przez IntelliJ. Nie szaleje na punkcie tej strony IntelliJ, zbyt wiele miejsc, by sprawdzić to samo.
SpacePrez,

Niesamowite. Dziękuję bardzo. To uratowało mi dzień. Walczyłem z błędem, nie jestem pewien, co należy zrobić, aby włączyć wyrażenia lambda.
Siddhartha Thota

Uruchomiłem apkę wiosennego rozruchu i nie jestem pewien, co poszło nie tak po tym, jak zacząłem używać wyrażeń lambda, zmieniłem ustawienia projektu, ale po wykonaniu tego ustawienia modułów działało dobrze.
Siddhartha Thota

75

To rozwiązanie działa w systemie Android Studio 3.0 lub nowszym.

  1. Plik> Struktura projektu> Moduły> aplikacja> karta Właściwości

wprowadź opis zdjęcia tutaj

Zmień zarówno na, jak Source Compatibilityi Target Compatibilityna1.8

  1. Edytuj plik konfiguracyjny

Możesz go również skonfigurować bezpośrednio w odpowiednim pliku 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

W przypadku Intellij 13 wystarczy zmienić poziom języka projektu na 8.0następującą nawigację.

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

java8

Poziom językowy modułu

Musiałem także zaktualizować, Modules lang levelgdy nie było wtyczki maven dla java compiler.

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

Poziomy modułów

Ale Module lang levelbyłoby to automatycznie naprawione, jeśli już jest maven pluginna to,

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

Po zmianach wszystko wygląda dobrze


5
@Czipperz: Ta odpowiedź zawiera zdjęcia. Wolę to, ponieważ faktycznie już spojrzałem na miejsce, o którym wspomniano zaakceptowaną odpowiedź, ale nie zauważyłem listy rozwijanej. Ta odpowiedź zawiera zdjęcia podkreślające dokładne miejsce, w którym znajduje się opcja.
ArtOfWarfare

2
część o pliku pom.xml jest naprawdę pomocna, dzięki!
Kevin Zhao

3
Po zmianie poziomu języka również dla modułu naprawiłem mój problem
nihasmata

23

W Android Studio Canary Build (3. +) możesz wykonać następujące czynności:

Plik -> Struktura projektu -> Szukaj w sekcji Moduły, są nazwy modułów twojej klasy. Kliknij moduł, w którym chcesz zaktualizować java do wersji 1.8. -> Zmień „Zgodność źródła” i „Zgodność docelowa” na 1.8 z 1.7 lub niższej. Nie zmieniaj niczego innego. -> Kliknij Zastosuj

teraz grad zsynchronizuje się ponownie, a twój błąd zostanie usunięty.


18

Po prostu dodaj compileOptionsw build.gradle swoją aplikację:

android {


...

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

2
Google ogłosił, że wycofali Jacka kilka tygodni temu. Obsługa funkcji języka Java 8 jest teraz natywnie zapewniana przez wtyczkę Android Gradle, począwszy od wersji Android Studio 2.4 Preview 4. Spójrz tutaj
nilsi

9

Dla najnowszych użytkowników korzystających z Android Studio 3.0.1 lub nowszego. Wystarczy kliknąć Alt + Enter i zaktualizować swój poziom języka do 8.0 - Lambdas, wpisz adnotacje itp.


łatwiej i lepiej niż inni
Abhishek Singh

6

Jeśli nie otrzymujesz wsparcia w języku 5 , sprawdź to: (Dla mnie było to w sekcji Moduły )

Lanaguge Poziom 5 nie jest obsługiwany


4

7.0 nie obsługuje wyrażeń lambda. Po prostu dodaj to do klasy aplikacji, aby zmienić poziom języka na 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

wprowadź opis zdjęcia tutaj


2

W rzeczywistości dostępna jest obsługa Eclipse dla Java 8: patrz tutaj i tutaj .

  • W przypadku Keplera jest on dostępny jako „łata funkcji” na SR2 (tj. Eclipse 4.3.2)
  • W przypadku Luny (Eclipse 4.4) będzie to wersja standardowa. ( harmonogram wydania )

2

Aby skompilować z Javą 8 (lambda itp.) W IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S lub Struktura pliku / projektu

  • Otwórz kartę Projekt

  • Ustaw Project SDK na kompatybilną wersję Java (1.8)

  • Ustaw poziom języka projektu na 8

  • Otwórz kartę Moduły

  • Ustaw Poziom języka na 8, kliknij OK

  • CTRL + ALT + S lub Plik / Ustawienia

  • Kompilacja, wykonanie, wdrożenie / kompilator / kompilator Java

  • Zmień docelową wersję kodu bajtowego na 1.8, kliknij OK


2

Korzystanie: IntelliJ IDEA 2017.1.4 Kompilacja # IU-171.4694.23

Zmiana poziomu języka na karcie Ustawienia projektu / Karta Projekt nic nie zrobiła. Zamiast tego naciśnij Alt+ Enteri wybierz „Ustaw poziom języka na 8 - Lambdas, wpisz adnotacje itp.” i rozwiązało się to automatycznie.


1

Jak zauważył Stephen C, Eclipse Kepler (4.3) obsługuje Javę 8 po zainstalowaniu łatki ( tutaj instrukcje instalacji )

Po zainstalowaniu musisz poinformować swoje projekty, aby używały java 8. Najpierw dodaj JDK do środowiska eclipse:

  • Przejdź do okna -> preferencje
  • Przejdź do Java -> Zainstalowane środowiska JRE
  • Dodaj standardową maszynę wirtualną i wskaż lokalizację środowiska JRE
  • Następnie przejdź do kompilatora
  • Ustaw poziom zgodności kompilatora na 1.8

Następnie powiedz projektowi, aby używał JDK 1.8:

  • Przejdź do projektu -> preferencje
  • Przejdź do kompilatora Java
  • Włącz ustawienia specyficzne dla projektu
  • Ustaw poziom zgodności kompilatora na 1.8

1

Sprawdź poniższe ustawienia:

  1. Plik-> Struktura projektu-> Karta Projekt.

    *Project SDK should be set to 8 or above.*
  2. Plik-> Struktura projektu-> Moduły.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Plik-> Ustawienia (lub Inne ustawienia-> Preferencje dla nowych projektów w nowszej wersji Pomysłu)

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

Twój problem może należeć do jednej z wyżej określonych kategorii.


1

Ten sam projekt ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') działa poprawnie na nowym szybkim komputerze z systemem Windows i podkreślają Java 8rzeczy kolorem czerwonym na starym laptopie Ubuntu 18.04 (jednak projekt kompiluje bez błędów na Ubuntu).

Jedyne dwie rzeczy, które zmieniłem, aby zmusić go do zaprzestania podkreślania przez kolor czerwony, wykluczały incremental trueidexOptions

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

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

na apppoziomie - build.gradle.



0

Nawet po zastosowaniu wyżej określonych ustawień specyficznych dla projektu w IntelliJ, a także w Eclipse, nadal mi się nie udawało!

działało dla mnie dodanie wtyczki maven ze źródłem i celem z ustawieniem 1.8 w 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

Możliwa przyczyna nr 1 (taka sama jak w przypadku pierwszych 3 odpowiedzi na to pytanie): Ustawienia struktury projektu

  1. Plik> Struktura projektu> W Ustawieniach projektu przejdź do Projekt> ustaw Project SDK na 1.8 (w wersji 65 lub wyższej, najnowsza to 112) i ustaw Poziom języka projektu na 8.

  2. Plik> Struktura projektu> W Ustawieniach platformy przejdź do Projekt> upewnij się, że twoja ścieżka główna JDK jest ustawiona na 1.8 (w wersji 65 lub wyższej, najnowsza to 112).

Jeśli powyższe nie działa, sprawdź docelową wersję kodu kompilatora i przejdź do Możliwej przyczyny # 2.

Możliwa przyczyna # 2: Kompilator

  1. Plik> Ustawienia> Kompilacja, wykonanie, wdrożenie> W Kompilatorze przejdź do Kompilatora Java> ustaw Wersja projektu Bytecode na 1.8, a także całą docelową wersję Bytecode dla swoich modułów. Kliknij Zastosuj i naciśnij OK . Uruchom ponownie IntelliJ IDE. Wyrażenie lambda zostało w tym momencie zaakceptowane w moim IDE.

Wszystkiego najlepszego :)


2
To było prawie trzy lata temu.
Czipperz

To jest dla osób korzystających z Google, aby sprawdzić już rozwiązane problemy. Ludzie pracujący w branży wiedzą o tym.
kuzevni

0

Dla mnie żadne z dostarczonych rozwiązań nie zadziałało.

To powinna być ostatnia deska ratunku: -> Otwórz plik .iml twojego projektu zmień LANGUAGE_LEVEL na JDK_1_8 lub dowolną wersję, którą chcesz. -> Jeśli to nie pomogło, należy grep "JDK" w katalogu głównym projektu i znaleźć plik zawierający ustawienie wersji i ustawić go na preferowaną wersję.


-1

Ctrl + Alt + Shift + S, a następnie z projektu wybierz poziom języka 1.8, czytaj więcej o wyrażeniach lambda tutaj


-1

Aby uzyskać obsługę Ecplise dla wyrażeń lambda:

  1. Upewnij się, że używasz JDK 1.8 (Okno> Preferencje> Zainstalowane środowiska JRE i kompilator);
  2. Użyj adnotacji @Funkcjonalny interfejs, jeśli zdefiniujesz jakieś nowe interfejsy funkcjonalne, aby zaćmienie zasugerowało ci refaktoryzacje związane z Lambdas ( interfejsy funkcjonalne ).

-1

Najpierw sprawdź używaną wersję JDK, powinna ona być wyższa niż 1.8.

Jeśli tak, wykonaj poniższe czynności.

Zmień poziom języka projektu i modułów w Intellij .

Projekt

1.Plik-> Struktura projektu-> Projekt-> Poziom języka projektu Zmień go na 8, aby działały wyrażenia lamba

2. Plik-> Struktura projektu-> Moduł-> Poziom języka projektu Zmień go na 8, aby działały wyrażenia lamba


-1

te odpowiedzi nie działają dla nowych zaktualizowanych intelliJ ... dla nowych intelliJ ..

Przejdź do -> plik -> Struktura projektu -> Globalne biblioteki ==> ustaw na JDK 1.8 lub nowszą wersję.

także Plik -> Struktura projektu ---> Projekty ===> ustaw „Podręcznik języka projektu” na 8

także Plik -> Struktura projektu ---> projekt sdk ==> 1.8

Powinno to umożliwić wyrażenie lambda dla twojego projektu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.