Java «expressions lambda non prises en charge à ce niveau de langage»

199

Je testais de nouvelles fonctionnalités de Java 8 et copiais l'exemple dans mon IDE (Eclipse à l'origine, puis IntelliJ) comme indiqué ici

Eclipse n'a offert aucun support pour les expressions lambda, et IntelliJ a continué à signaler une erreur

Expressions lambda non prises en charge à ce niveau de langue

Je voudrais savoir s'il s'agit d'un problème avec mon installation, le code ou le support.

Czipperz
la source
3
C'est un problème IDE. Vous devez modifier la conformité de votre compilateur.
Sotirios Delimanolis
6
Dans IDEA, sélectionnez Fichier -> Structure du projet; vous aurez la possibilité de changer le niveau de langue
fge
1
@Czipperz: Sur SO ne pas annoter le titre avec "Résolu", marquez les meilleures réponses comme "Accepté" en cliquant sur la coche. Cela récompense le répondeur et montre que la question a une réponse qui résout le problème. Si aucune réponse ne donne la bonne résolution, vous êtes libre de poster une auto-réponse puis de la marquer comme acceptée (après une période d'attente).
Lawrence Dol
@ LawrenceDol Je l'ai annoté comme ça parce qu'ils ne l'ont pas publié comme réponse, mais comme commentaire.
Czipperz

Réponses:

346

Dans IntelliJ IDEA:

Dans File MenuProject StructureProject, passez Project Language Levelà8.0 - Lambdas, type annotations etc.

Pour Android 3.0+ Go FileProject StructureModuleappet Propriétés Dans l' onglet ensemble Source Compatibilityet Target Compatibilityà1.8 (Java 8)

Capture d'écran:

entrez la description de l'image ici

Abhilash Divakaran
la source
69
Remarque de la modification proposée : Vous pouvez également configurer le niveau de langue pour chaque module File Menu → Project Structure → Modules, mais par défaut, il sera le même que le niveau de langue du projet.
user1516873
6
Je suis confronté au même problème pour Android Studio et ni l'un ni l'autre n'a trouvé les mêmes paramètres dans l'IDE que vous mentionnez ci-dessus. Toute suggestion !
CoDe
18
@Shubh: Dans Gradle, ajoutez ces lignes, votre code fonctionnera: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo
6
Après la mise à niveau vers IntelliJ 15 , j'ai dû changer le niveau de langue du projet jusqu'à 9, puis revenir à 8 pour que cela prenne effet.
averasko
17
Cette réponse est dépassée. Sur Android 3.1.2, accédez à File-> Project Structure-> Module you want to support lambdaset définissez la compatibilité source et la compatibilité cible sur 1,8
Ivan
98

Vous devez également modifier le niveau de langue du code source dans l'onglet Source (partie Modules).

Changer le niveau de langue

user2682809
la source
3
votre réponse devrait être plus élevée ou avec d'autres réponses
muni764
2
+1. La priorité des modules est supérieure à celle du projet. Je préfère donc définir le niveau de langue des modules.
Ge Liu
Cela n'inclut pas le module dont IntelliJ a également besoin. Pas fou de ce côté d'IntelliJ, trop d'endroits pour vérifier la même chose.
SpacePrez
Impressionnant. Merci beaucoup. Cela m'a sauvé la journée. Je me débattais avec l'erreur, je ne savais pas trop quoi faire pour activer les expressions lambda.
Siddhartha Thota
J'exécutais une application Spring Boot, et je ne sais pas ce qui s'est passé après avoir commencé à utiliser des expressions lambda, j'ai changé les paramètres du projet, mais après avoir suivi ce paramètre de module, cela a bien fonctionné.
Siddhartha Thota
75

Cette solution fonctionne dans Android Studio 3.0 ou version ultérieure.

  1. Fichier> Structure du projet> Modules> application> onglet Propriétés

entrez la description de l'image ici

Changer à la fois de Source Compatibilityet Target Compatibilityvers1.8

  1. Modifier le fichier de configuration

Vous pouvez également le configurer directement dans le fichier build.gradle correspondant

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
la source
42

Pour intellij 13, changez simplement le niveau de langue du projet lui-même en 8.0suivant la navigation.

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

java8

Niveau de langue du module

J'ai également dû mettre à jour Modules lang levelquand il n'y avait pas de plugin maven pour java compiler.

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

Modules niveau lang

Mais cela Module lang levelserait automatiquement corrigé s'il y en avait déjà un 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>

Après les changements, tout semble bien

Prayagupd
la source
5
@Czipperz: Cette réponse a des photos. Je le préfère, car j'avais déjà regardé à l'endroit indiqué la réponse acceptée, mais je n'ai pas remarqué la liste déroulante. Cette réponse contient des images mettant en évidence l'endroit exact où l'option se trouve.
ArtOfWarfare
2
la partie sur le fichier pom.xml est vraiment utile, merci!
Kevin Zhao
3
Après avoir changé le niveau de langue, le module a également résolu mon problème
nihasmata
23

Dans Android Studio Canary Build (3. +), vous pouvez effectuer les opérations suivantes:

Fichier -> Structure du projet -> Rechercher dans la section Modules, il existe des noms de modules de votre classe. Cliquez sur le module dans lequel vous souhaitez mettre à niveau Java vers la version 1.8. -> Modifiez "Compatibilité source" et "Compatibilité cible" à 1,8 à partir de 1,7 ou inférieur. Ne changez rien d'autre. -> Cliquez sur Appliquer

maintenant gradle se resynchronisera et votre erreur sera supprimée.

Tarun
la source
18

Ajoutez simplement compileOptionsbuild.gradle à votre application:

android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
Morozov
la source
2
Google a annoncé avoir déprécié Jack il y a quelques semaines. La prise en charge des fonctionnalités du langage Java 8 est désormais fournie nativement par le plug-in Android Gradle, à partir d'Android Studio 2.4 Preview 4. Regardez ici
nilsi
9

Pour les derniers utilisateurs utilisant Android studio 3.0.1 ou supérieur. Cliquez simplement sur Alt + Entrée et mettez à niveau votre niveau de langue vers 8.0 - Lambdas, saisissez des annotations, etc.

Vivek
la source
facile et meilleur que les autres
Abhishek Singh
6

Si vous obtenez Non pris en charge en langue 5 , vérifiez ceci: (Pour moi, c'était dans la section Modules )

Lanaguge niveau 5 non pris en charge

Kejsi Struga
la source
5

7.0 ne prend pas en charge les expressions lambda. Ajoutez simplement ceci à votre gradle d'application pour changer votre niveau de langue à 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

entrez la description de l'image ici

l'amour en direct
la source
2

En fait, le support Eclipse pour Java 8 est disponible: voir ici et ici .

  • Pour Kepler, il est disponible en tant que «patch de fonctionnalité» contre SR2 (c'est-à-dire Eclipse 4.3.2)
  • Pour Luna (Eclipse 4.4), ce sera dans la version standard. ( calendrier de sortie )
Stephen C
la source
2

Pour compiler avec Java 8 (lambdas, etc.) dans IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S ou Structure de fichier / projet

  • Ouvrir l'onglet Projet

  • Définir Project SDK sur une version Java compatible (1.8)

  • Définissez le niveau de langue du projet sur 8

  • Onglet Ouvrir les modules

  • Définissez le niveau de langue sur 8, cliquez sur OK

  • CTRL + ALT + S ou Fichier / Paramètres

  • Build, Execution, Deployment / Compiler / Java Compiler

  • Remplacez la version cible du bytecode par 1.8, cliquez sur OK

Daniel de Zwaan
la source
2

Utilisation: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

Changer le niveau de langue via l'onglet Paramètres du projet / Projet n'a rien fait. Au lieu de cela , appuyez sur Alt+ Enteret sélectionnez "Définir le niveau de langue sur 8 - Lambdas, tapez les annotations, etc." et il s'est résolu automatiquement.

Patrick Schaefer
la source
1

Comme l'a souligné Stephen C, Eclipse Kepler (4.3) prend en charge Java 8 lorsque le correctif est installé (instructions d'installation ici )

Une fois installé, vous devrez dire à vos projets d'utiliser java 8. Ajoutez d'abord le JDK à eclipse:

  • Allez dans Fenêtre -> Préférences
  • Accédez à Java -> JRE installés
  • Ajoutez une machine virtuelle standard et pointez sur l'emplacement du JRE
  • Ensuite, allez dans le compilateur
  • Définissez le niveau de conformité du compilateur sur 1,8

Dites ensuite au projet d'utiliser JDK 1.8:

  • Allez dans Projet -> préférences
  • Accédez au compilateur Java
  • Activer les paramètres spécifiques au projet
  • Définissez le niveau de conformité du compilateur sur 1,8
Gijs Overvliet
la source
1

Vérifiez les paramètres ci-dessous:

  1. Fichier-> Structure du projet-> Onglet Projet.

    *Project SDK should be set to 8 or above.*
  2. Fichier-> Structure du projet-> Modules.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Fichier-> Paramètres (ou Autres paramètres-> Préférence pour les nouveaux projets dans une version Idea plus récente)

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

Votre problème peut appartenir à l'une des catégories définies ci-dessus.

Nitesh Kumar Thakur
la source
1

Le même projet ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') fonctionne très bien sur la nouvelle machine Windows rapide et Souligné Java 8choses par la couleur rouge sur le vieux portable Ubuntu 18.04 (cependant projet compile sans erreur sur Ubuntu).

Les deux seules choses que j'ai modifiées pour l'obliger à arrêter de souligner le rouge étaient l'exclusion de incremental trueetdexOptions

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

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

dans le app- niveau build.gradle.

est absent
la source
0

Dans intellij 14, les paramètres suivants ont fonctionné pour moi. Paramètres Intellij14

user5760784
la source
0

Même après avoir appliqué les paramètres spécifiques au projet définis ci-dessus sur IntelliJ ainsi que sur Eclipse, cela échouait toujours pour moi!

ce qui a fonctionné pour moi était l'ajout du plugin maven avec la source et la cible avec le paramètre 1.8 dans 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
la source
0

Cause possible n ° 1 (identique aux 3 premières réponses à cette question): Paramètres de structure du projet

  1. Fichier> Structure du projet> Sous Paramètres du projet, accédez à Projet> définissez le SDK du projet sur 1,8 (avec la version 65 ou supérieure, la dernière est 112) et définissez le niveau de langue du projet sur 8.

  2. Fichier> Structure du projet> Sous Paramètres de la plate-forme, accédez à Projet> assurez-vous que votre chemin d’accueil JDK est défini sur 1,8 (avec la version 65 ou supérieure, la dernière est 112).

Si ce qui précède ne fonctionne pas, vérifiez la version de bytecode cible de votre compilateur et passez à la cause possible # 2.

Cause possible n ° 2: compilateur

  1. Fichier> Paramètres> Build, Execution, Deployment> Sous Compiler, accédez à Java Compiler> définissez votre version de Bytecode de projet sur 1.8, ainsi que toute la version de Bytecode cible pour vos modules. Cliquez sur Appliquer et appuyez sur OK . Redémarrez votre IDE IntelliJ. L'expression lambda a été acceptée dans mon IDE à ce stade.

Meilleurs vœux :)

kuzevni
la source
2
C'était il y a presque trois ans.
Czipperz
Il s'agit pour les personnes utilisant Google de vérifier les problèmes déjà résolus. Les gens qui travaillent dans l'industrie le savent.
kuzevni
0

Pour moi, aucune des solutions proposées n'a fonctionné.

Cela devrait être votre dernier recours: -> Ouvrez le fichier .iml de votre projet, changez le LANGUAGE_LEVEL en JDK_1_8 ou la version de votre choix. -> Si cela n'a pas aidé, vous devriez grep "JDK" dans le répertoire racine de votre projet et trouver le fichier qui contient le paramètre de version et le définir sur votre version préférée.

Pruthvidhar Rao Nadunooru
la source
-1

Ctrl + Alt + Maj + S, puis dans le projet, sélectionnez le niveau de langue 1.8, en savoir plus sur les expressions Lambda ici

Toseef Zafar
la source
-1

Pour prendre en charge Ecplise pour les expressions lambda:

  1. Assurez-vous que vous utilisez JDK 1.8 (Fenêtre> Préférences> JRE et compilateur installés);
  2. Utilisez l'annotation @FunctionalInterface si vous définissez de nouvelles interfaces fonctionnelles afin qu'eclipse vous propose des refactorings liés aux Lambdas ( Functional Interfaces ).
Mehdi
la source
-1

Vérifiez d'abord la version de JDK que vous utilisez, elle devrait être supérieure à 1,8.

Si c'est le cas, passez aux étapes ci-dessous.

Changer le niveau de langue du projet et des modules dans Intellij .

Projet

1.Fichier-> Structure du projet-> Projet-> Niveau de langue du projet Modifiez-le à 8 pour que les expressions lamba fonctionnent

2.Fichier-> Structure du projet-> Module-> Niveau de langue du projet Modifiez-le à 8 pour que les expressions lamba fonctionnent

Abhishek Tiwari
la source
-1

cela ne fonctionne pas pour les nouveaux intelliJ mis à jour ... pour les nouveaux intelliJ ..

Allez dans -> fichier -> Structure du projet -> Bibliothèques globales ==> réglez sur JDK 1.8 ou version supérieure.

également File -> project Structure ---> projects ===> set "project language manual" to 8

également Fichier -> Structure du projet ---> projet sdk ==> 1.8

Cela devrait activer l'expression lambda pour votre projet.

Abhijit
la source