Java “expressões lambda não suportadas neste nível de linguagem”

198

Eu estava testando alguns novos recursos do Java 8 e copiei o exemplo no meu IDE (Eclipse originalmente, depois IntelliJ), como mostrado aqui

O Eclipse não ofereceu nenhum suporte para expressões lambda e o IntelliJ continuou relatando um erro

Expressões lambda não suportadas neste nível de idioma

Gostaria de saber se esse é um problema com minha instalação, o código ou o suporte.

Czipperz
fonte
3
É uma questão de IDE. Você precisa alterar a conformidade do compilador.
Sotirios Delimanolis 28/03
6
No IDEA, selecione Arquivo -> Estrutura do projeto; você terá a opção de alterar o nível do idioma
fge 28/03
1
@Czipperz: No SO, não anote o título com "Resolvido", marque as melhores respostas como "Aceito" clicando no carrapato. Isso recompensa o respondente e mostra que a pergunta tem uma resposta que resolve o problema. Se nenhuma resposta der a resolução certa, você poderá publicar uma resposta automática e marcar como aceita (após um período de espera).
Lawrence Dol
possível duplicata de Como uso os recursos do Java 8 no Eclipse Luna?
Svetlin Zarev 28/03
@LawrenceDol Anotei assim porque eles não publicaram como resposta, mas como comentário.
Czipperz

Respostas:

344

No IntelliJ IDEA:

Em File MenuProject StructureProject, mude Project Language Levelpara8.0 - Lambdas, type annotations etc.

Para Android 3.0+, vá FileProject StructureModuleappe na guia Propriedades, defina Source Compatibilitye Target Compatibilitypara1.8 (Java 8)

Captura de tela:

enter image description here

Abhilash Divakaran
fonte
69
Nota da edição proposta : Você também pode configurar o nível de idioma para cada módulo File Menu → Project Structure → Modules, mas, por padrão, será o mesmo que o nível de idioma do Projeto.
User1516873 14/05
6
Estou enfrentando o mesmo problema no Android Studio e nem encontrei as mesmas configurações no IDE mencionadas acima. Alguma sugestão !
CoDe
18
@Shubh: Em Gradle, adicione estas linhas, seu código funcionará: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo 25/15/15
6
Após a atualização para o IntelliJ 15 , tive que alterar o nível de idioma do projeto para 9 e depois para 8 para que isso surtesse efeito.
averasko
17
Esta resposta está desatualizada. No Android 3.1.2, vá para File-> Project Structure-> Module you want to support lambdase defina Compatibilidade de Origem e Compatibilidade de Destino como 1,8
Ivan
98

Você deve alterar o nível de idioma do código-fonte também na guia Origem (parte de Módulos).

Alterar nível de idioma

user2682809
fonte
3
sua resposta deve ser maior ou em conjunto com outras respostas
muni764
2
+1. A prioridade dos módulos é maior que a do projeto. Então, eu prefiro definir o nível de idioma da parte dos módulos.
Ge Liu
Isso não inclui o módulo que o IntelliJ também exige. Não é louco por esse lado do IntelliJ, há muitos lugares para verificar a mesma coisa.
SpacePrez 19/09/17
Impressionante. Muito obrigado. Isso salvou meu dia. Eu estava lutando com o erro, não sei o que precisa ser feito para ativar as expressões lambda.
Siddhartha Thota
Eu estava executando um ap de inicialização por mola e, sem saber o que deu errado depois de começar a usar expressões lambda, alterei as configurações do projeto, mas depois de seguir a configuração dos módulos, funcionou bem.
Siddhartha Thota
75

Esta solução funciona no Android Studio 3.0 ou posterior.

  1. Arquivo> Estrutura do projeto> Módulos> aplicativo> guia Propriedades

insira a descrição da imagem aqui

Alterar ambos Source Compatibilitye Target Compatibilitypara1.8

  1. Editar arquivo de configuração

Você também pode configurá-lo diretamente no arquivo build.gradle correspondente

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

Para intellij 13, basta alterar o nível de idioma do projeto para 8.0a seguinte navegação.

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

java8

Nível do módulo

Eu também tive que atualizar Modules lang levelquando não havia nenhum plugin para o maven java compiler.

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

Módulos lang level

Mas isso Module lang levelseria corrigido automaticamente se já houver um maven pluginpara isso,

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

Depois das alterações, tudo fica bem

prayagupd
fonte
5
@Czipperz: Esta resposta tem fotos. Eu prefiro, porque na verdade eu já havia consultado o local da resposta aceita, mas não percebi o menu suspenso. Esta resposta tem fotos destacando o local exato onde está a opção.
ArtOfWarfare
2
a parte sobre o arquivo pom.xml é realmente útil, obrigado!
Kevin Zhao
3
Depois de alterar nível de linguagem também para o módulo fixo meu problema
nihasmata
23

No Android studio canary build (3. +), você pode fazer o seguinte:

Arquivo -> Estrutura do projeto -> Procure na seção Módulos, existem nomes de módulos da sua classe. Clique no módulo no qual você deseja atualizar o java para a versão 1.8. -> Altere "Compatibilidade de origem" e "Compatibilidade de destino" para 1,8 de 1,7 ou inferior. Não mude mais nada. -> Clique em Aplicar

agora o gradle será sincronizado novamente e seu erro será removido.

Tarun
fonte
18

Basta adicionar compileOptionsno build.gradle seu aplicativo:

android {


...

  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
Morozov
fonte
2
O Google anunciou que está depreciando Jack há algumas semanas. Possui Java 8 linguagem suporte agora é nativamente fornecido pelo plugin Gradle Android, começando com Android Estúdio 2.4 Pré-Visualização 4. Olhe aqui
nilsi
9

Para usuários mais recentes que usam o Android studio 3.0.1 ou superior. Basta clicar em Alt + Enter e atualizar o seu nível de idioma para 8.0 - Lambdas, digite anotações etc.

Vivek
fonte
fácil e melhor do que os outros
Abhishek Singh
6

Se você está recebendo Não suportado no idioma 5 , verifique o seguinte: (Para mim, estava na seção Módulos )

Lanaguge Nível 5 não suportado

Kejsi Struga
fonte
5

7.0 não suporta expressões lambda. Basta adicionar isso ao seu aplicativo para alterar o nível do idioma para 8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

insira a descrição da imagem aqui

amor ao vivo
fonte
2

Na verdade, o suporte do Eclipse para Java 8 está disponível: veja aqui e aqui .

  • Para o Kepler, ele está disponível como um "patch de recurso" no SR2 (por exemplo, Eclipse 4.3.2)
  • Para o Luna (Eclipse 4.4), ele estará no release padrão. ( cronograma de lançamento )
Stephen C
fonte
2

Para compilar com Java 8 (lambdas etc.) no IntelliJ IDEA 15;

  • CTRL + ALT + SHIFT + S ou Estrutura de arquivo / projeto

  • Abrir aba Projeto

  • Defina o Project SDK para a versão java compatível (1.8)

  • Defina o nível de idioma do projeto como 8

  • Abra a guia Módulos

  • Defina o nível do idioma como 8, clique em OK

  • CTRL + ALT + S ou Arquivo / Configurações

  • Compilação, Execução, Implantação / Compilador / Compilador Java

  • Altere a versão de bytecode de destino para 1,8, clique em OK

Daniel de Zwaan
fonte
2

Usando: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

A alteração do nível do idioma na guia Configurações do projeto / Projeto não fez nada. Em vez disso, pressione Alt+ Entere selecione "Defina o nível do idioma como 8 - Lambdas, digite anotações etc." e foi resolvido automaticamente.

Patrick Schaefer
fonte
1

Como Stephen C apontou, o Eclipse Kepler (4.3) tem suporte ao Java 8 quando o patch é instalado (instruções de instalação aqui )

Uma vez instalado, você precisará informar seus projetos para usar o java 8. Primeiro adicione o JDK ao eclipse:

  • Vá para Janela -> Preferências
  • Vá para Java -> JREs Instalados
  • Adicione VM padrão e aponte para o local do JRE
  • Então vá para o compilador
  • Defina o nível de conformidade do compilador para 1,8

Em seguida, diga ao projeto para usar o JDK 1.8:

  • Vá para Projeto -> preferências
  • Vá para o Java Compiler
  • Ativar configurações específicas do projeto
  • Defina o nível de conformidade do compilador para 1,8
Gijs Overvliet
fonte
1

Verifique as configurações abaixo:

  1. Arquivo-> Estrutura do Projeto-> Guia Projeto.

    *Project SDK should be set to 8 or above.*
  2. Arquivo-> Estrutura do Projeto-> Módulos.

    *Check that your or all modules has Language level set to 8 or above.*
  3. Arquivo-> Configurações (ou Outras Configurações-> Preferência para novos projetos na versão mais recente do Idea)

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

Seu problema pode se enquadrar em qualquer uma das categorias definidas acima.

Nitesh Kumar Thakur
fonte
1

O mesmo projeto ( Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') funciona bem na nova máquina Windows rápido e sublinhado Java 8coisas pela cor vermelha na idade Ubuntu 18.04 laptop (no entanto projeto é compilar sem erros no Ubuntu).

As únicas duas coisas que eu mudei para forçá-lo a parar de sublinhar em vermelho foram excluir incremental trueedexOptions

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

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

no appnível build.gradle.

está ausente
fonte
0

Mesmo depois de aplicar as configurações específicas do projeto acima definidas no IntelliJ e no Eclipse, ele ainda estava falhando para mim!

o que funcionou para mim foi a adição do plugin maven com origem e destino com a configuração 1.8 no XML POM:

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

Possível causa nº 1 (igual às 3 primeiras respostas para esta pergunta): Configurações da estrutura do projeto

  1. Arquivo> Estrutura do projeto> Em Configurações do projeto, vá para Projeto> defina o SDK do projeto para 1,8 (com a versão 65 ou superior, a última é 112) e defina o nível de idioma do projeto como 8.

  2. Arquivo> Estrutura do projeto> Em Configurações da plataforma, vá para Projeto> verifique se o caminho inicial do JDK está definido como 1,8 (com a versão 65 ou superior, a última é 112).

Se o procedimento acima não funcionar, verifique a versão de bytecode de destino do seu compilador e vá para a possível causa nº 2.

Causa possível # 2: Compilador

  1. Arquivo> Configurações> Compilação, Execução, Implantação> Em Compilador, acesse Java Compiler> defina sua Versão do Bytecode do Projeto como 1.8, bem como todas as Versão de Bytecode de Destino para seus módulos. Clique em Aplicar e clique em OK . Reinicie o seu IntelliJ IDE. A expressão lambda foi aceita no meu IDE neste momento.

Muitas felicidades :)

kuzevni
fonte
2
Isso foi há quase três anos atrás.
CZipperz #
Isso é para pessoas que usam o google para verificar problemas já resolvidos. As pessoas que trabalham na indústria sabem disso.
kuzevni
0

Para mim, nenhuma das soluções fornecidas funcionou.

Este deve ser seu último recurso: -> Abra o arquivo .iml do seu projeto, altere LANGUAGE_LEVEL para JDK_1_8 ou qualquer versão que você desejar. -> Se isso não ajudou, você deve grep "JDK" no diretório raiz do projeto e localize o arquivo que contém a configuração de versão e defina-a como sua versão preferida.

Pruthvidhar Rao Nadunooru
fonte
-1

Ctrl + Alt + Shift + S e, em seguida, no projeto, selecione o nível de idioma 1.8, leia mais sobre as expressões Lambda aqui

Toseef Zafar
fonte
-1

Para ter suporte do Ecplise para expressões lambda:

  1. Verifique se você está usando o JDK 1.8 (Janela> Preferências> JREs e compilador instalados);
  2. Use a anotação @FunctionalInterface se você definir quaisquer novas interfaces funcionais para que o eclipse sugira refatorações relacionadas a Lambdas ( Interfaces Funcionais ).
Mehdi
fonte
-1

Primeiro verifique a versão do JDK que você está usando, ela deve ser maior que 1,8.

Se for, siga as etapas abaixo.

Alterar o nível de idioma do projeto e dos módulos no Intellij .

Projeto

1.Arquivo-> Estrutura do Projeto-> Projeto-> Nível do idioma do projeto Altere para 8 para que as expressões do lamba funcionem

2.Arquivo-> Estrutura do Projeto-> Módulo-> Nível da linguagem do projeto Altere para 8 para que as expressões do lamba funcionem

Abhishek Tiwari
fonte
-1

essas respostas não estão funcionando para o novo intelecto atualizado ... para o novo intelecto ..

Vá para -> arquivo -> Estrutura do Projeto -> Bibliotecas Globais ==> definido como JDK 1.8 ou versão superior.

também Arquivo -> estrutura do projeto ---> projetos ===> defina "manual do idioma do projeto" para 8

Também Arquivo -> Estrutura do Projeto ---> project sdk ==> 1.8

Isso deve ativar a expressão lambda para o seu projeto.

Abhijit
fonte