Java“此语言级别不支持lambda表达式”

问题描述 投票:157回答:23

我正在测试Java 8的一些新功能,并将示例复制到我的IDE(Eclipse最初,然后是IntelliJ),如图所示here

Eclipse没有为lambda表达式提供任何支持,IntelliJ不断报告错误

此语言级别不支持Lambda表达式

我想知道这是我的安装,代码或支持的问题。

java intellij-idea lambda java-8
23个回答
256
投票

在IntelliJ IDEA中:

File MenuProject StructureProject,将Project Language Level改为8.0 - Lambdas, type annotations etc.

对于Android 3.0+ Go FileProject StructureModuleapp和在属性选项卡中将Source CompatibilityTarget Compatibility设置为1.8 (Java 8)

截图:

enter image description here


2
投票

实际上,Eclipse支持Java 8:请参阅herehere

  • 对于Kepler,它可作为针对SR2的“功能补丁”(即Eclipse 4.3.2)
  • 对于Luna(Eclipse 4.4),它将在标准版本中。 (release schedule

2
投票

在IntelliJ IDEA 15中使用Java 8(lambdas等)进行编译;

  • CTRL + ALT + SHIFT + S或文件/项目结构
  • 打开项目选项卡
  • 将Project SDK设置为兼容的java版本(1.8)
  • 将项目语言级别设置为8
  • 打开模块选项卡
  • 将语言级别设置为8,单击“确定”
  • CTRL + ALT + S或文件/设置
  • 构建,执行,部署/编译器/ Java编译器
  • 将目标字节码版本更改为1.8,单击“确定”

2
投票

使用:IntelliJ IDEA 2017.1.4 Build#IU-171.4694.23

通过“项目设置”/“项目”选项卡更改语言级别没有执行任何操作。而是按Alt + Enter并选择“将语言级别设置为8 - Lambdas,键入注释等”。它自动解决。


1
投票

正如Stephen C所指出的,Eclipse Kepler(4.3)在安装补丁时支持Java 8(安装说明here

安装完成后,您需要告诉您的项目使用java 8.首先将JDK添加到eclipse中:

  • 转到窗口 - >首选项
  • 转到Java - >已安装的JRE
  • 添加标准VM,并指向JRE的位置
  • 然后转到编译器
  • 将编译器合规性级别设置为1.8

然后告诉项目使用JDK 1.8:

  • 转到项目 - >首选项
  • 转到Java Compiler
  • 启用项目特定设置
  • 将编译器合规性级别设置为1.8

1
投票

检查以下设置:

  1. 文件 - >项目结构 - >项目选项卡。 *Project SDK should be set to 8 or above.*
  2. 文件 - >项目结构 - >模块。 *Check that your or all modules has Language level set to 8 or above.*
  3. 文件 - >设置(或其他设置 - >新版Idea中新项目的首选项) *Search for Java compiler and check if Project byte code version and per module byte code version is set 8 or above.*

您的问题可能属于上面定义的任何一个类别。


1
投票

同样的项目(Android Studio 3.3.2gradle-4.10.1-all.zipcompileSdkVersion 28buildToolsVersion '28.0.3')在新的快速Windows机器上运行良好,并在旧的Ubuntu 18.04笔记本电脑上用红色强调Java 8的东西(但是项目在Ubuntu上编译没有错误)。

我改变的唯一两件事就是强制它停止用红色加下划线,排除了incremental truedexOptions

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

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

app-水平build.gradle


0
投票

在intellij 14中,以下设置对我有用。 Intellij14 Settings


0
投票

即使在IntelliJ和Eclipse上应用了上面定义的项目特定设置之后,它仍然失败了!

对我来说有用的是添加带有源和目标的maven插件以及POM XML中的1.8设置:

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

0
投票

可能的原因#1(与此问题的前3个答案相同):项目结构设置

  1. 文件>项目结构>在项目设置下,转到项目>将项目SDK设置为1.8(版本65或更高版本,最新版本为112)并将项目语言级别设置为8。
  2. 文件>项目结构>在“平台设置”下,转到“项目”>确保将JDK主路径设置为1.8(版本65或更高版本,最新版本为112)。

如果上述操作无效,请检查编译器的目标字节码版本,然后继续执行可能的原因#2。

可能的原因#2:编译器

  1. 文件>设置>构建,执行,部署>在编译器下,转到Java编译器>将项目字节码版本设置为1.8,以及模块的所有目标字节码版本。单击Apply,然后单击OK。重新启动IntelliJ IDE。此时,在我的IDE中接受了Lambda表达式。

最好的祝愿 :)


0
投票

对我来说,提供的解决方案都没有奏效。

这应该是你最后的选择: - >打开项目的.iml文件将LANGUAGE_LEVEL更改为JDK_1_8或任何你想要的版本。 - >如果这没有帮助,你应该在项目根目录中grep“JDK”并找到包含版本设置的文件并将其设置为首选版本。


93
投票

您还应在“源”选项卡(“模块”部分)上更改源代码语言级别。

Change Language Level


-1
投票

按Ctrl + Alt + Shift + S然后从项目中选择语言级别1.8,了解有关Lambda表达式的更多信息here


-1
投票

为lambda表达式支持Eclipse:

  1. 确保使用的是JDK 1.8(Window> Preferences> Installed JREs and Compiler);
  2. 如果您定义任何新的功能接口,请使用注释@FunctionalInterface,以便eclipse建议您与Lambdas(Functional Interfaces)相关的重构。

-1
投票

首先检查您使用的JDK版本,它应该高于1.8。

如果是,则继续执行以下步骤。

更改Intellij中项目和模块的语言级别。

项目

1.文件 - >项目结构 - >项目 - >项目语言级别将其更改为8,以使lambda表达式起作用

2.文件 - >项目结构 - >模块 - >项目语言级别将其更改为8,以使lambda表达式起作用


-1
投票

这个答案不适用于新的更新的智能...用于新的智能...

转到 - >文件 - >项目结构 - >全局库==>设置为JDK 1.8或更高版本。

还有文件 - >项目结构--->项目===>将“项目语言手册”设置为8

还有文件 - >项目结构--->项目sdk ==> 1.8

这应该为您的项目启用lambda表达式。


57
投票

此解决方案适用于Android Studio 3.0或更高版本。

  1. 文件>项目结构>模块>应用程序>属性选项卡

enter image description here

Source CompatibilityTarget Compatibility都改为1.8

  1. 编辑配置文件

您也可以直接在相应的build.gradle文件中进行配置

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

41
投票

对于intellij 13,只需使用以下导航将Project语言级别本身更改为8.0

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

模块级别

Modules lang level没有maven插件时,我还必须更新java compiler

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

Modules lang level

但如果已经有Module lang level,这个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>

改变后一切看起来都不错


23
投票

在Android studio canary build(3. +)中,您可以执行以下操作:

文件 - >项目结构 - >查看模块部分,有类的模块名称。单击要将java升级到1.8版本的模块。 - >从1.7或更低版​​本将“源兼容性”和“目标兼容性”更改为1.8。不要改变任何其他东西。 - >单击“应用”

现在gradle将重新同步,您的错误将被删除。


18
投票

只需在build.gradle你的app中添加compileOptions

android {


...

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

9
投票

适用于使用Android studio 3.0.1或更高版本的最新用户。只需单击Alt + Enter并将语言级别升级到8.0 - Lambdas,键入注释等。


5
投票

如果你得到语言5不支持,请检查:(对我而言,它在模块部分)

Lanaguge Level 5 not supported


3
投票

7.0不支持lambda表达式。只需将此添加到您的应用程序gradle即可将语言级别更改为8.0:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.