web-dev-qa-db-fra.com

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

Je testais certaines nouvelles fonctionnalités de Java 8 et j'ai copié l'exemple dans mon IDE (Eclipse à l'origine, puis IntelliJ) comme indiqué ci-dessous: http://docs.Oracle.com/javase/ tutorial/Java/javaOO/examples/RosterTest.Java

Eclipse n'offrait aucun support pour les expressions lambda et IntelliJ continuait à signaler une erreur "Les expressions lambda n'étaient pas prises en charge à ce niveau de langage". J'aimerais savoir s'il s'agit d'un problème d'installation, de code ou de support.

149
Czipperz

Dans IntelliJ IDEA:

Dans File MenuProject StructureProject, remplacez Project Language Level par 8.0 - Lambdas, type annotations etc.

229
Abhilash

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

 Change Language Level

87
user2682809

Les votes les plus importants ne fonctionnent pas dans la dernière version d'Android Studio 3.0 ou version ultérieure

  1. Fichier> Structure du projet  enter image description here

Remplacez Source Compatibility et Target Compatibility par 1.8

  1. Editer 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
  }
}
40
Alen Lee

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

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

Java8

Niveau de module

J'ai également dû mettre à jour Modules lang level quand il n'y avait pas de plug-in maven pour Java compiler.

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

 Modules lang level

Mais ce Module lang level serait automatiquement corrigé s’il existait 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 va bien

40
prayagupd

Dans Android studio canary build (3. +), vous pouvez effectuer les opérations suivantes:

Fichier -> Structure du projet -> Rechercher dans la section Modules, il y a 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é de la source" et "Compatibilité de la cible" de 1,8 ou moins à 1,8. Ne changez rien d'autre. -> Cliquez sur Appliquer

maintenant gradle sera resynchronisé et votre erreur sera supprimée.

23
Tarun

Ajoutez simplement compileOptions dans build.gradle yours app:

Android {


...

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

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

10
Vivek

Si vous obtenez Non pris en charge par la langue 5, cochez la case suivante: ( Pour moi, cela se trouvait dans la section Modules)

 Lanaguge Level 5 not supported

4
Kejsi Struga

Compiler avec Java 8 (lambdas etc.) dans IntelliJ IDEA 15;

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

  • Ouvrir l'onglet Projet

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

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

  • Ouvrir l'onglet Modules

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

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

  • Construction, exécution, déploiement/compilateur/compilateur Java

  • Changez la version du bytecode cible en 1.8, cliquez sur OK.

3
Daniel de Zwaan

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é" sur SR2 (à savoir Eclipse 4.3.2)
  • Pour Luna (Eclipse 4.4), ce sera dans la version standard. ( calendrier de sortie )
3
Stephen C

Utilisation de: 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. Frapper à la place Alt + Enter et en sélectionnant "Définir le niveau de langue sur 8 - Lambdas, taper des annotations, etc." et cela s'est résolu automatiquement.

2
Patrick Schaefer

7.0 ne supporte pas les expressions lambda. Ajoutez-le simplement à votre niveau d'application pour changer votre niveau de langue à 8.0

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

 enter image description here

2
live-love

Comme l'a souligné Stephen C, Eclipse Kepler (4.3) prend en charge Java 8 lors de l'installation du correctif (instructions d'installation ici )

Une fois installé, vous devrez indiquer à vos projets d’utiliser Java 8. Commencez par ajouter le JDK à Eclipse:

  • Aller à la fenêtre -> Préférences
  • Aller à Java -> JRE installés
  • Ajoutez une machine virtuelle standard et pointez sur l'emplacement du JRE.
  • Ensuite, allez au compilateur
  • Définissez le niveau de conformité du compilateur sur 1.8

Ensuite, indiquez au projet d'utiliser JDK 1.8:

  • Aller au projet -> préférences
  • Aller au compilateur Java
  • Activer les paramètres spécifiques au projet
  • Définissez le niveau de conformité du compilateur sur 1.8
2
Gijs Overvliet

Ajouter le bloc suivant au fichier pom a fonctionné pour moi:

<build>
    <plugins>
        <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>
    </plugins>
</build>
1
Radi

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 la nouvelle version d'idée)

    *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 tomber dans l’une des catégories définies ci-dessus. 

1
thakurnitesh27

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 a été l’ajout du plug-in maven avec source et target avec un paramètre 1.8 en 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> 
1
Dean Jain

Le même projet (Android Studio 3.3.2, gradle-4.10.1-all.Zip, compileSdkVersion 28, buildToolsVersion '28.0.3') fonctionne bien sur la nouvelle machine Windows rapide et souligne Java 8 par une couleur rouge sur le ancien ordinateur portable Ubuntu 18.04 (cependant, le projet est compilé sans erreurs sur Ubuntu ).

Les deux seules choses que j'ai changées pour le forcer à arrêter de souligner par le rouge étaient d'exclure incremental true et dexOptions

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

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

dans la app- level build.gradle.

1
isabsent

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

  1. Fichier> Structure du projet> Sous Paramètres du projet, sélectionnez Projet> définir Project SDK sur 1.8 (avec la version 65 ou supérieure, la version la plus récente est 112) et définissez 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 de répertoire du 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 n ° 2.

Cause possible n ° 2: compilateur

  1. Fichier> Paramètres> Construire, Exécution, Déploiement> Sous Compilateur, accédez à Compilateur Java> définissez votre version du bytecode du projet sur 1.8, ainsi que tous les version du bytecode cible de 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 :)

1
kuzevni

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

1
user5760784

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

Cela devrait être votre dernier recours. répertoire racine du projet et recherchez le fichier contenant le paramètre de version et définissez-le sur votre version préférée.

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

0
Toseef Zafar

Commencez par vérifier la version de JDK que vous utilisez, elle devrait être supérieure à 1.8.

Si c'est le cas, procédez comme suit.

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

Projet

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

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

0
Abhishek Tiwari

Pour avoir le support de Ecplise pour les expressions lambda:

  1. Assurez-vous que vous utilisez JDK 1.8 (Fenêtre> Préférences> JRE installés et compilateur);
  2. Utilisez l'annotation @FunctionalInterface si vous définissez de nouvelles interfaces fonctionnelles de sorte qu'Eclipse vous suggère de refactoriser les liens liés à Lambdas ( Functional Interfaces .)
0
Mehdi

cela ne fonctionne pas pour les nouvelles intelliJ mises à jour ... pour les nouvelles intelliJ ..

Allez dans -> Fichier -> Structure du projet -> Bibliothèques globales ==> sur JDK 1.8 ou une version ultérieure. 

également Fichier -> Structure du projet ---> projets ===> régler le "manuel de langue du projet" sur 8 

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

Cela devrait permettre l'expression lambda pour votre projet.

0
Abhijit