predicado - java operação funcional



“Expressões lambda de Java não suportadas neste nível de linguagem” (16)

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

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

Eu estava testando alguns novos recursos do Java 8 e copiei o exemplo para o meu IDE (Eclipse originalmente, depois IntelliJ) como mostrado aqui: http://docs.oracle.com/javase/tutorial/java/javaOO/examples/RosterTest.java

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 linguagem". Gostaria de saber se isso é um problema com minha instalação, o código ou suporte.


Answer #1

Basta adicionar compileOptions no app build.gradle yours:

android {


...

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

Answer #2

Ctrl + Alt + Shift + S e depois do projeto selecione o nível de linguagem 1.8, leia mais sobre Lambda Expressions here


Answer #3

Em IntelliJ IDEA:

No File MenuProject StructureProject , altere o Project Language Level para 8.0 - Lambdas, type annotations etc.

Para Android 3.0+ Go File -> Project Structure -> Module -> app -> definir Source Compatibility e Target Compatibility para 1.8


Answer #4

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

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

Altere a Source Compatibility de Source Compatibility e a Target Compatibility para 1.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
  }
}

Answer #5

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

o que funcionou para mim foi a adição do plugin maven com fonte e alvo com a configuração 1.8 no 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> 

Answer #6

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

Arquivo -> Estrutura do Projeto -> Olhe na Seção Módulos, existem nomes de módulos da sua classe. Clique no módulo em que 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á re-sincronizado e seu erro será removido.


Answer #7

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ápida e sublinha o material do Java 8 pela cor vermelha no antigo Ubuntu 18.04 laptop (no entanto projeto está compilando sem erros no Ubuntu).

As únicas duas coisas que eu mudei para forçá-lo a parar de sublinhar pelo vermelho foram excluindo do incremental true e dexOptions

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

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

no app - nível build.gradle .


Answer #8

Para intellij 13, simplesmente mude o nível de linguagem do Project para 8.0 com a seguinte navegação.

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

Nível de Módulo Lang

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

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

Mas este Module lang level será automaticamente corrigido se já houver um maven plugin para ele,

    <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 muda tudo fica bem


Answer #9

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

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


Answer #10

Para ter suporte do Ecplise para expressões lambda:

  1. Certifique-se de estar usando o JDK 1.8 (Janela> Preferências> JREs e Compilador Instalados);
  2. Use a anotação @FunctionalInterface se você definir qualquer nova interface funcional para que o eclipse sugira refatorações relacionadas a Lambdas ( Interfaces Funcionais ).

Answer #11

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

  1. Arquivo> Estrutura do projeto> Em Configurações do projeto, vá para Projeto> defina SDK do projeto como 1.8 (com a versão 65 ou superior, o mais recente é 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 acima não funcionar, verifique a versão bytecode de destino do seu compilador e avance para a causa possível # 2.

Possível causa # 2: compilador

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

Muitas felicidades :)


Answer #12

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


Answer #13

Usando: IntelliJ IDEA 2017.1.4 Build # IU-171.4694.23

Alterar o nível de idioma através da aba Project Settings / Project não fez nada. Em vez disso, pressione Alt + Enter e selecione "Definir nível de idioma como 8 - Lambdas, digite anotações etc." e resolveu automaticamente.


Answer #14

Você deve alterar o código-fonte Language Level também na guia Origem (parte Módulos).


Answer #15

isso não funciona para a nova atualização do intelliJ ... for new intelliJ ..

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

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

também File -> project Structure ---> projeto sdk ==> 1.8

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





java-8