Java "expresiones lambda no admitidas en este nivel de lenguaje"

198

Estaba probando algunas características nuevas de Java 8 y copié el ejemplo en mi IDE (Eclipse originalmente, luego IntelliJ) como se muestra aquí

Eclipse no ofreció soporte alguno para las expresiones lambda, e IntelliJ siguió informando un error

No se admiten expresiones lambda en este nivel de idioma

Me gustaría saber si esto es un problema con mi instalación, el código o el soporte.

Czipperz
fuente
3
Es un problema IDE. Tiene que cambiar el cumplimiento de su compilador.
Sotirios Delimanolis
66
En IDEA, seleccione Archivo -> Estructura del proyecto; tendrá la opción de cambiar el nivel de idioma
fge
1
@Czipperz: en SO, no anote el título con "Resuelto", marque las mejores respuestas como "Aceptadas" haciendo clic en la marca. Eso recompensa al que responde y muestra que la pregunta tiene una respuesta que resuelve el problema. Si ninguna respuesta da la resolución correcta, puede publicar una respuesta propia y luego marcarla como aceptada (después de un período de espera).
Lawrence Dol
@LawrenceDol Lo anoté así porque no lo publicaron como respuesta, sino como comentario.
Czipperz

Respuestas:

345

En IntelliJ IDEA:

En File MenuProject StructureProject, cambie Project Language Levela8.0 - Lambdas, type annotations etc.

Para Android 3.0+ Vaya FileProject StructureModuleappy en el conjunto de pestañas Propiedades Source Compatibilityy Target Compatibilitya1.8 (Java 8)

Captura de pantalla:

ingrese la descripción de la imagen aquí

Abhilash Divakaran
fuente
69
Nota de la edición propuesta : también puede configurar el nivel de idioma para cada módulo File Menu → Project Structure → Modules, pero de forma predeterminada será el mismo que el nivel de idioma del proyecto.
user1516873
66
Estoy enfrentando el mismo problema para Android Studio y tampoco encontré la misma configuración en IDE que mencionas anteriormente. Cualquier sugerencia !
Código
18
@Shubh: en Gradle, agregue estas líneas, su código funcionará: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo
66
Después de actualizar a IntelliJ 15 , tuve que cambiar el nivel de idioma del proyecto hasta 9 y luego volver a 8 para que surta efecto.
averasko
17
Esta respuesta está desactualizada. En Android 3.1.2, vaya a File-> Project Structure-> Module you want to support lambdasy configure la compatibilidad de origen y la compatibilidad de destino en 1.8
Ivan
98

Debe cambiar el nivel de idioma del código fuente también en la pestaña Fuente (parte de Módulos).

Cambiar nivel de idioma

usuario2682809
fuente
3
su respuesta debe ser mayor o junto con otras respuestas
muni764
2
+1. La prioridad de los módulos es mayor que la del proyecto. Así que prefiero configurar el nivel de idioma de la parte de módulos.
Ge Liu
Esto no incluye el módulo que IntelliJ también requiere. No estoy loco por este lado de IntelliJ, hay demasiados lugares para verificar lo mismo.
SpacePrez
Increíble. Muchas gracias. Esto me salvó el día. Estaba luchando con el error, no estoy seguro de lo que hay que hacer para habilitar las expresiones lambda.
Siddhartha Thota
Estaba ejecutando una aplicación de arranque de primavera, y no estoy seguro de qué salió mal después de que comencé a usar expresiones lambda, cambié la configuración del proyecto, pero después de seguir la configuración de estos módulos, funcionó bien.
Siddhartha Thota
75

Esta solución funciona en Android Studio 3.0 o posterior.

  1. Archivo> Estructura del proyecto> Módulos> aplicación> pestaña Propiedades

ingrese la descripción de la imagen aquí

Cambiar tanto de Source Compatibilitycomo Target Compatibilitya1.8

  1. Editar archivo de configuración

También puede configurarlo directamente en el archivo build.gradle correspondiente

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

Para intellij 13, simplemente cambie el nivel de idioma del Proyecto en8.0con la siguiente navegación.

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

java8

Nivel de módulo lang

También tuve que actualizar Modules lang levelcuando no había ningún complemento de Maven java compiler.

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

Módulos de nivel lang

Pero esto Module lang levelse solucionaría automáticamente si ya hay un maven pluginpara ello,

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

Después de los cambios todo se ve bien

prayagupd
fuente
55
@Czipperz: Esta respuesta tiene fotos. Lo prefiero, porque en realidad ya había mirado el lugar que mencionaba la respuesta aceptada pero no noté el menú desplegable. Esta respuesta tiene imágenes que destacan el lugar exacto donde está la opción.
ArtOfWarfare
2
la parte sobre el archivo pom.xml es realmente útil, ¡gracias!
Kevin Zhao
3
Después de cambiar el nivel de lenguaje también para el módulo fijo mi problema
nihasmata
23

En Android Studio Canary Build (3. +), puede hacer lo siguiente:

Archivo -> Estructura del proyecto -> Buscar en la sección Módulos, hay nombres de módulos de su clase. Haga clic en el módulo en el que desea actualizar Java a la versión 1.8. -> Cambie "Compatibilidad de origen" y "Compatibilidad de destino" a 1.8 de 1.7 o inferior. No cambies nada más. -> Haga clic en Aplicar

ahora gradle se volverá a sincronizar y se eliminará su error.

Tarun
fuente
18

Simplemente agregue la compileOptionsaplicación build.gradle:

android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
Morozov
fuente
2
Google anunció que despreciaron a Jack hace unas semanas. El complemento de Android Gradle ahora proporciona compatibilidad con las características del lenguaje Java 8, comenzando con Android Studio 2.4 Preview 4. Mira aquí
nilsi
9

Para los últimos usuarios que usan Android studio 3.0.1 o superior. Simplemente haga clic en Alt + Intro y actualice su nivel de idioma a 8.0 - Lambdas, escriba anotaciones, etc.

Vivek
fuente
fácil y mejor que otros
Abhishek Singh
6

Si obtiene No admitido en el Idioma 5 , verifique esto: (Para mí estaba en la sección Módulos )

Lanaguge Nivel 5 no compatible

Kejsi Struga
fuente
5

7.0 no admite expresiones lambda. Simplemente agregue esto a su aplicación gradle para cambiar su nivel de idioma a 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

ingrese la descripción de la imagen aquí

vive el amor
fuente
2

En realidad, el soporte de Eclipse para Java 8 está disponible: vea aquí y aquí .

  • Para Kepler, está disponible como un "parche de características" contra SR2 (es decir, Eclipse 4.3.2)
  • Para Luna (Eclipse 4.4) estará en la versión estándar. ( calendario de lanzamiento )
Stephen C
fuente
2

Para compilar con Java 8 (lambdas, etc.) en IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S o Archivo / Estructura del proyecto

  • Abrir pestaña Proyecto

  • Configure Project SDK en la versión compatible de Java (1.8)

  • Establecer el nivel de idioma del proyecto en 8

  • Abrir la pestaña Módulos

  • Establezca el nivel de idioma en 8, haga clic en Aceptar

  • CTRL + ALT + S o Archivo / Configuración

  • Compilación, ejecución, implementación / compilador / compilador Java

  • Cambie la versión de código de bytes de destino a 1.8, haga clic en Aceptar

Daniel de Zwaan
fuente
2

Utilizando: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

Cambiar el nivel de idioma a través de la pestaña Configuración del proyecto / Proyecto no hizo nada. En su lugar, presione Alt+ Entery seleccione "Establecer nivel de idioma en 8 - Lambdas, escriba anotaciones, etc." y se resolvió automáticamente.

Patrick Schaefer
fuente
1

Como señaló Stephen C, Eclipse Kepler (4.3) tiene soporte para Java 8 cuando se instala el parche (instrucciones de instalación aquí )

Una vez instalado, deberá indicar a sus proyectos que usen Java 8. Primero agregue el JDK para eclipsar:

  • Ir a la ventana -> Preferencias
  • Vaya a Java -> JRE instalados
  • Agregue VM estándar y señale la ubicación del JRE
  • Luego ve al compilador
  • Establecer el nivel de cumplimiento del compilador en 1.8

Luego dígale al proyecto que use JDK 1.8:

  • Vaya a Proyecto -> preferencias
  • Ir al compilador de Java
  • Habilitar configuraciones específicas del proyecto
  • Establecer el nivel de cumplimiento del compilador en 1.8
Gijs Overvliet
fuente
1

Verifique la configuración a continuación:

  1. Archivo-> Estructura del proyecto-> Ficha Proyecto.

    *Project SDK should be set to 8 or above.*
  2. Archivo-> Estructura del proyecto-> Módulos.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Archivo-> Configuración (u Otras configuraciones-> Preferencia para nuevos proyectos en la nueva versión de Idea)

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

Su problema puede caer en cualquiera de las categorías definidas anteriormente.

Nitesh Kumar Thakur
fuente
1

El mismo proyecto ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') trabaja muy bien en la nueva máquina rápida de Windows y subrayado Java 8cosas por el color rojo en la vieja Ubuntu 18.04 portátil (no obstante proyecto está recopilando y sin errores en Ubuntu).

Las dos únicas cosas que he cambiado para obligarlo a dejar de subrayar en rojo fueron excluir incremental trueydexOptions

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

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

en el appnivel build.gradle.

está ausente
fuente
0

Incluso después de aplicar las configuraciones específicas del proyecto definidas anteriormente en IntelliJ y Eclipse, ¡todavía me fallaba!

lo que funcionó para mí fue la adición del complemento maven con fuente y destino con configuración 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> 
Dean Jain
fuente
0

Causa posible n. ° 1 (igual que las 3 primeras respuestas a esta pregunta): Configuración de la estructura del proyecto

  1. Archivo> Estructura del proyecto> En Configuración del proyecto, vaya a Proyecto> configure el SDK del proyecto en 1.8 (con la versión 65 o superior, la última es la 112) y configure el Nivel de idioma del proyecto en 8.

  2. Archivo> Estructura del proyecto> En Configuración de la plataforma, vaya a Proyecto> asegúrese de que su ruta de inicio JDK esté configurada en 1.8 (con la versión 65 o superior, la última es la 112).

Si lo anterior no funciona, verifique la versión de código de bytes de destino de su compilador y continúe con la Causa Posible # 2.

Posible causa # 2: compilador

  1. Archivo> Configuración> Compilación, ejecución, implementación> En el compilador, vaya al compilador de Java> establezca su versión de Project Bytecode en 1.8, así como toda la versión de Target Bytecode para sus módulos. Haga clic en Aplicar y presione Aceptar . Reinicie su IntelliJ IDE. La expresión lambda fue aceptada en mi IDE en este momento.

Los mejores deseos :)

kuzevni
fuente
2
Esto fue hace casi tres años.
Czipperz
Esto es para las personas que usan Google para verificar problemas ya resueltos. Las personas que trabajan en la industria lo saben.
kuzevni
0

Para mí, ninguna de las soluciones proporcionadas funcionó.

Este debería ser su último recurso: -> Abra el archivo .iml de su proyecto, cambie LANGUAGE_LEVEL a JDK_1_8 o la versión que desee. -> Si esto no ayudó, debe seleccionar "JDK" en el directorio raíz del proyecto y buscar el archivo que contiene la configuración de la versión y configurarlo en su versión preferida.

Pruthvidhar Rao Nadunooru
fuente
-1

Ctrl + Alt + Shift + S y luego desde el proyecto seleccione el nivel de idioma 1.8, lea más sobre las expresiones Lambda aquí

Toseef Zafar
fuente
-1

Para tener soporte de Ecplise para expresiones lambda:

  1. Asegúrese de estar utilizando JDK 1.8 (Ventana> Preferencias> JRE instalados y compilador);
  2. Utilice la anotación @FunctionalInterface si define nuevas interfaces funcionales para que eclipse le sugiera refactorizaciones relacionadas con Lambdas ( interfaces funcionales) .
Mehdi
fuente
-1

Primero verifique la versión de JDK que está utilizando, debe ser superior a 1.8.

Si es así, continúe con los pasos a continuación.

Cambiar el nivel de idioma del proyecto y los módulos en Intellij .

Proyecto

1.Archivo-> Estructura del proyecto-> Proyecto-> Nivel de lenguaje del proyecto Cámbielo a 8 para que funcionen las expresiones de lamba

2.Archivo-> Estructura del proyecto-> Módulo-> Nivel de lenguaje del proyecto Cámbielo a 8 para que funcionen las expresiones de lamba

Abhishek Tiwari
fuente
-1

esto no funciona para nuevos intelliJ actualizados ... para nuevos intelliJ ..

Vaya a -> archivo -> Estructura del proyecto -> Bibliotecas globales ==> establecido en JDK 1.8 o una versión superior.

también Archivo -> estructura del proyecto ---> proyectos ===> establezca el "manual del idioma del proyecto" en 8

también File -> project Structure ---> project sdk ==> 1.8

Esto debería habilitar la expresión lambda para su proyecto.

Abhijit
fuente