Java "espressioni lambda non supportate a questo livello linguistico"


198

Stavo testando alcune nuove funzionalità di Java 8 e ho copiato l'esempio nel mio IDE (Eclipse originariamente, quindi IntelliJ) come mostrato qui

Eclipse non offriva alcun supporto per le espressioni lambda e IntelliJ continuava a segnalare un errore

Espressioni lambda non supportate a questo livello linguistico

Vorrei sapere se questo è un problema con la mia installazione, il codice o il supporto.


3
È un problema IDE. Devi modificare la conformità del tuo compilatore.
Sotirios Delimanolis,

6
In IDEA, selezionare File -> Struttura del progetto; avrai la possibilità di cambiare il livello della lingua
fge

1
@Czipperz: su SO non annotare il titolo con "Risolto", contrassegnare le risposte migliori come "Accettato" facendo clic sul segno di spunta. Che premia il risponditore e mostra che la domanda ha una risposta che risolve il problema. Se nessuna risposta fornisce la giusta risoluzione, sei libero di pubblicare una risposta automatica e quindi contrassegnarla come accettata (dopo un periodo di attesa).
Lawrence Dol,


@LawrenceDol L'ho annotato in quel modo perché non l'hanno pubblicato come risposta, ma come commento.
Czipperz,

Risposte:


345

In IntelliJ IDEA:

In File MenuProject StructureProject, cambia Project Language Levelin8.0 - Lambdas, type annotations etc.

Per Android 3.0+ vai su FileProject StructureModuleappe nella scheda Proprietà imposta Source Compatibilitye Target Compatibilitysu1.8 (Java 8)

Immagine dello schermo:

inserisci qui la descrizione dell'immagine


69
Nota dalla modifica proposta : puoi anche configurare il livello di lingua per ogni modulo File Menu → Project Structure → Modules, ma per impostazione predefinita sarà lo stesso del livello di lingua del Progetto.
user1516873

6
Sto riscontrando lo stesso problema per Android Studio e non ho trovato le stesse impostazioni nell'IDE che hai citato sopra. Qualche suggerimento !
CoDe

18
@Shubh: in Gradle, aggiungi queste righe, il tuo codice funzionerà: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
Dopo aver effettuato l' aggiornamento a IntelliJ 15 , ho dovuto modificare il livello della lingua del progetto su 9 e poi di nuovo su 8 per renderlo effettivo.
averasko,

17
Questa risposta è obsoleta. Su Android 3.1.2 vai su File-> Project Structure-> Module you want to support lambdase imposta Compatibilità sorgente e Compatibilità target su 1.8
Ivan

98

È necessario modificare il livello di lingua del codice sorgente anche nella scheda Sorgente (parte Moduli).

Cambia livello lingua


3
la tua risposta dovrebbe essere più alta o insieme ad altre risposte
muni764

2
+1. La priorità dei moduli è superiore a quella del progetto. Quindi preferisco impostare il livello linguistico della parte dei moduli.
Ge Liu,

Questo non include il modulo richiesto anche da IntelliJ. Non pazzo di questo lato di IntelliJ, troppi posti per controllare la stessa cosa.
SpacePrez,

Eccezionale. Grazie mille. Questo mi ha salvato la giornata. Ero alle prese con l'errore non sono sicuro di cosa si debba fare per abilitare le espressioni lambda.
Siddhartha Thota,

Stavo eseguendo un'app di avvio di primavera, e non sono sicuro di cosa sia andato storto dopo aver iniziato a usare le espressioni lambda, ho modificato le impostazioni del progetto, ma dopo aver seguito questa impostazione dei moduli, ha funzionato bene.
Siddhartha Thota,

75

Questa soluzione funziona in Android Studio 3.0 o versioni successive.

  1. File> Struttura del progetto> Moduli> app> scheda Proprietà

inserisci qui la descrizione dell'immagine

Cambia sia di Source Compatibilityche Target Compatibilityin1.8

  1. Modifica il file di configurazione

Puoi anche configurarlo direttamente nel file build.gradle corrispondente

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

Per intellij 13, è sufficiente modificare il livello della lingua del progetto stesso 8.0con la seguente navigazione.

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

java8

Livello di lingua del modulo

Ho anche dovuto aggiornare Modules lang levelquando non c'era nessun plugin per Maven java compiler.

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

Moduli di livello lang

Ma questo Module lang levelverrebbe automaticamente corretto se ce n'è già uno 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>

Dopo i cambiamenti tutto sembra a posto


5
@Czipperz: questa risposta ha delle immagini. Lo preferisco, perché in realtà avevo già guardato nel punto indicato nella risposta accettata ma non ho notato il menu a discesa. Questa risposta contiene immagini che evidenziano il punto esatto in cui si trova l'opzione.
ArtOfWarfare

2
la parte relativa al file pom.xml è davvero utile, grazie!
Kevin Zhao,

3
Dopo aver cambiato il livello della lingua anche per il modulo risolto il mio problema
nihasmata

23

In Android Studio Canary Build (3. +), puoi fare quanto segue:

File -> Struttura del progetto -> Cerca nella sezione Moduli, ci sono nomi di moduli della tua classe. Fare clic sul modulo in cui si desidera aggiornare java alla versione 1.8. -> Modifica "Compatibilità sorgente" e "Compatibilità target" su 1,8 da 1,7 o precedente. Non cambiare nient'altro. -> Fai clic su Applica

ora Gradle si risincronizzerà e il tuo errore verrà rimosso.


18

Aggiungi compileOptionsin build.gradle la tua app:

android {


...

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

2
Google ha annunciato di aver deprecato Jack qualche settimana fa. Il supporto delle funzionalità del linguaggio Java 8 è ora fornito nativamente dal plug-in Android Gradle, a partire da Android Studio 2.4 Preview 4. Guarda qui
nilsi

9

Per gli ultimi utenti che utilizzano Android Studio 3.0.1 o versioni successive. Fai semplicemente clic su Alt + Invio e aggiorna il tuo livello di lingua a 8.0 - Lambdas, digita annotazioni ecc.


facile e migliore di altri
Abhishek Singh,

6

Se stai ottenendo Non supportato in Lingua 5 , controlla questo: (Per me era nella sezione Moduli )

Lanaguge Level 5 non supportato


5

7.0 non supporta le espressioni lambda. Basta aggiungere questo al tuo grado di app per cambiare il tuo livello di lingua a 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

inserisci qui la descrizione dell'immagine


2

In realtà, è disponibile il supporto Eclipse per Java 8: vedi qui e qui .

  • Per Keplero, è disponibile come "feature patch" contro SR2 (ovvero Eclipse 4.3.2)
  • Per Luna (Eclipse 4.4) sarà nella versione standard. ( programma di rilascio )

2

Compilare con Java 8 (lambdas ecc.) In IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S o Struttura file / progetto

  • Apri la scheda Progetto

  • Impostare Project SDK su versione java compatibile (1.8)

  • Impostare il livello della lingua del progetto su 8

  • Apri la scheda Moduli

  • Impostare il livello della lingua su 8, fare clic su OK

  • CTRL + ALT + S o File / Impostazioni

  • Compilazione, esecuzione, distribuzione / compilatore / compilatore Java

  • Cambia la versione del codice byte di destinazione in 1.8, fai clic su OK


2

Utilizzo: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

La modifica del livello della lingua tramite la scheda Impostazioni progetto / Progetto non ha fatto nulla. Premi invece Alt+ Entere seleziona "Imposta il livello della lingua su 8 - Lambdas, digita annotazioni ecc." e si è risolto automaticamente.


1

Come ha sottolineato Stephen C, Eclipse Kepler (4.3) ha il supporto Java 8 quando è installata la patch (istruzioni di installazione qui )

Una volta installato, dovrai dire ai tuoi progetti di usare java 8. Per prima cosa aggiungi JDK a eclipse:

  • Vai a Finestra -> Preferenze
  • Vai a Java -> JRE installati
  • Aggiungi VM standard e punta alla posizione di JRE
  • Quindi vai al compilatore
  • Impostare il livello di conformità del compilatore su 1.8

Quindi dire al progetto di utilizzare JDK 1.8:

  • Vai a Progetto -> preferenze
  • Vai al compilatore Java
  • Abilita impostazioni specifiche del progetto
  • Impostare il livello di conformità del compilatore su 1.8

1

Controlla sotto le impostazioni:

  1. File-> Struttura del progetto-> Scheda Progetto.

    *Project SDK should be set to 8 or above.*
  2. File-> Struttura del progetto-> Moduli.

    *Check that your or all modules has Language level set to 8 or above.*
  3. File-> Impostazioni (o Altre impostazioni-> Preferenza per nuovi progetti nella nuova versione di Idea)

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

Il problema potrebbe rientrare in una qualsiasi delle categorie sopra definite.


1

Lo stesso progetto ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') funziona bene sulla nuova macchina Windows veloce e sottolineatura Java 8roba per colore rosso sulla vecchia Ubuntu 18.04 portatile (tuttavia progetto sta compilando senza errori su Ubuntu).

Le uniche due cose che ho cambiato per costringerlo a smettere di sottolineare con il rosso sono state l'esclusione di incremental trueedexOptions

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

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

nel applivello - build.gradle.



0

Anche dopo aver applicato le impostazioni specifiche del progetto sopra definite su IntelliJ e su Eclipse, continuava a fallire per me!

ciò che ha funzionato per me è stata l'aggiunta del plugin Maven con sorgente e destinazione con impostazione 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> 

0

Possibile causa n. 1 (uguale alle prime 3 risposte a questa domanda): Impostazioni della struttura del progetto

  1. File> Struttura del progetto> In Impostazioni progetto, vai a Progetto> imposta Project SDK su 1.8 (con la versione 65 o successiva, l'ultima è 112) e imposta Livello lingua progetto su 8.

  2. File> Struttura del progetto> In Impostazioni piattaforma, vai su Progetto> assicurati che il tuo percorso home JDK sia impostato su 1.8 (con la versione 65 o successiva, l'ultima è 112).

Se quanto sopra non funziona, controlla la versione bytecode di destinazione del tuo compilatore e passa a Possible Cause # 2.

Possibile causa n. 2: compilatore

  1. File> Impostazioni> Build, Execution, Deployment> Under Compiler, vai a Java Compiler> imposta la tua versione del Bytecode di progetto su 1.8 e tutta la versione del bytecode di destinazione per i tuoi moduli. Fai clic su Applica e premi OK . Riavvia il tuo IDE IntelliJ. L'espressione lambda è stata accettata nel mio IDE a questo punto.

Auguri :)


2
Questo è stato quasi tre anni fa.
Czipperz,

Questo è per le persone che utilizzano Google per verificare la presenza di problemi già risolti. Le persone che lavorano nel settore lo sanno.
kuzevni,

0

Per me nessuna delle soluzioni fornite ha funzionato.

Questa dovrebbe essere la tua ultima risorsa: -> Apri il file .iml del tuo progetto cambia LANGUAGE_LEVEL in JDK_1_8 o qualunque versione desideri. -> Se questo non ha aiutato, dovresti grep "JDK" nella directory principale del tuo progetto e trovare il file che contiene le impostazioni della versione e impostarlo sulla tua versione preferita.


-1

Ctrl + Alt + Maiusc + S, quindi dal progetto seleziona il livello di lingua 1.8, leggi di più sulle espressioni Lambda qui


-1

Per avere il supporto di Ecplise per le espressioni lambda:

  1. Assicurati di utilizzare JDK 1.8 (Finestra> Preferenze> JRE e compilatore installati);
  2. Utilizzare l'annotazione @FunctionalInterface se si definiscono nuove interfacce funzionali in modo che l'eclissi suggerisca i refactoring relativi a Lambdas ( interfacce funzionali ).

-1

Prima controlla la versione di JDK che stai utilizzando, dovrebbe essere superiore a 1.8.

In tal caso, procedere come segue.

Cambia il livello di lingua del progetto e dei moduli in Intellij .

Progetto

1.File-> Struttura del progetto-> Progetto-> Livello della lingua del progetto Cambiarlo in 8 per far funzionare le espressioni lamba

2.File-> Struttura del progetto-> Modulo-> Livello della lingua del progetto Cambiarlo in 8 per far funzionare le espressioni lamba


-1

questa risposta non funziona per il nuovo intelliJ aggiornato ... per il nuovo intelliJ ..

Vai a -> file -> Struttura del progetto -> Librerie globali ==> impostato su JDK 1.8 o versione successiva.

anche File -> Struttura del progetto ---> progetti ===> imposta "manuale della lingua del progetto" su 8

anche File -> Struttura del progetto ---> project sdk ==> 1.8

Ciò dovrebbe abilitare l'espressione lambda per il tuo progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.