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


198

我的Java 8的一些新功能和复制的例子测试伸到我的IDE(Eclipse的原话的IntelliJ)如图所示这里

Eclipse不提供对lambda表达式的任何支持,并且IntelliJ不断报告错误

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

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


3
这是一个IDE问题。您必须更改编译器合规性。
Sotirios Delimanolis 2014年

6
在IDEA中,选择File-> Project structure;您可以选择更改语言级别
fge 2014年

1
@Czipperz:因此,请不要在标题上标注“已解决”,只需单击对勾,将最佳答案标记为“已接受”。这会奖励回答者并显示问题具有解决问题的答案。如果没有答案可以提供正确的解决方案,则您可以自由发布自我答案,然后将其标记为已接受(在等待一段时间后)。
劳伦斯·多尔


@LawrenceDol之所以这样注释,是因为他们没有将其发布为答案,而是作为评论。
Czipperz 2014年

Answers:


344

在IntelliJ IDEA中:

File Menu→交通Project Structure→交通Project,改Project Language Level8.0 - Lambdas, type annotations etc.

对于Android 3.0以上版本转到File→交通Project Structure→交通Module→交通app并在属性选项卡集Source CompatibilityTarget Compatibility1.8 (Java 8)

屏幕截图:

在此处输入图片说明


69
建议编辑的注释:您还可以为每个模块配置语言级别File Menu → Project Structure → Modules,但是默认情况下,它将与项目语言级别相同。
user1516873

6
我遇到了Android Studio的相同问题,在您上面提到的IDE中都找不到相同的设置。任何建议!
CoDe15'9

18
@Shubh:在Gradle中添加以下行,您的代码将正常工作: android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
BaDo

6
之后升级的IntelliJ 15,我不得不改变项目语言水平达到9,然后回到8为生效。
averasko 2015年

17
这个答案已经过时了。在Android 3.1.2上,转到File-> Project Structure-> Module you want to support lambdas并将“ 源兼容性”和“ 目标兼容性”设置1.8
Ivan

98

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

更改语言等级


3
您的答案应该更高或与其他答案一起
muni764 '16

2
+1。模块的优先级高于项目的优先级。所以我更喜欢设置模块部分的语言级别。
葛刘

这不包括IntelliJ也需要的模块。对于IntelliJ的这一方面并不感到疯狂,有太多地方可以检查同一件事。
SpacePrez

太棒了 非常感谢。这挽救了我的一天。我一直在为该错误而苦苦挣扎,不确定是否需要做些什么才能启用lambda表达式。
悉达多索塔

我正在运行spring boot ap,并且不确定在开始使用lambda表达式后出了什么问题,我更改了项目设置,但是在遵循此模块设置之后,它工作正常。
Siddhartha Thota

75

此解决方案可在Android Studio 3.0或更高版本中使用。

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

在此处输入图片说明

变化既Source CompatibilityTarget Compatibility1.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
  }
}

42

对于intellij 13,只需通过以下导航将Project语言级别本身更改为即可8.0

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

Java8的

模块语言级别

Modules lang level当还没有Maven插件时,我还必须进行更新java compiler

File
|
|
 ---------Project Structure -> Modules tab
          |
          |________ language 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>

更改后,一切看起来都很好


5
@Czipperz:这个答案有图片。我更喜欢它,因为我实际上已经查看了提及的可接受答案的地点,但是没有注意到下拉菜单。该答案的图片突出显示了该选项所在的确切位置。
ArtOfWarfare 2015年

2
关于pom.xml文件的部分确实很有帮助,谢谢!
凯文·赵

3
更改了语言级别后,模块也解决了我的问题
nihasmata

23

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

文件->项目结构->在“模块”部分中,有您的类的模块名称。单击要在其中将Java升级到1.8版本的模块。->将“源兼容性”和“目标兼容性”从1.7或更低更改为1.8。请勿更改其他任何内容。->点击应用

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


18

只需添加compileOptionsbuild.gradle您的应用程序即可:

android {


...

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

2
谷歌宣布他们几周前将弃用杰克。从Android Studio 2.4 Preview 4开始,Android Gradle插件现已提供Java 8语言功能支持。请看此处
nilsi

9

对于使用Android Studio 3.0.1或更高版本的最新用户。只需单击Alt + Enter,然后将您的语言级别升级到8.0-Lambda,输入注释等。


比其他人容易和更好
Abhishek Singh '18年

6

如果您的语言5不受支持,请检查以下内容:(对我来说,它在“ 模块”部分中)

不支持Lanaguge 5级


4

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

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

在此处输入图片说明


2

实际上,可以使用Eclipse对Java 8的支持:请参见此处此处

  • 对于Kepler,它可以作为针对SR2(例如Eclipse 4.3.2)的“功能补丁”使用。
  • 对于Luna(Eclipse 4.4),它将在标准版本中。(发布时间表

2

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

  • 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-Lambda,输入注释等”。它会自动解决。


1

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

安装后,您需要告诉您的项目使用Java8。首先将JDK添加到eclipse:

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

然后告诉项目使用JDK 1.8:

  • 转到项目->首选项
  • 转到Java编译器
  • 启用项目特定设置
  • 将编译器合规性级别设置为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机器和下划线Java 8以红色的东西,老的Ubuntu 18.04的笔记本电脑(但项目没有错误编译在Ubuntu)。

我已更改为迫使其停止用红色下划线的仅有的两件事是排除了incremental truedexOptions

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

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

app水平上build.gradle



0

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

对我有用的是在POM XML中添加了带有源和目标的maven插件以及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. 在“文件”>“项目结构”>“项目设置”下,转到“项目”>,将Project SDK设置为1.8(版本为65或更高版本,最新版本为112),并将“ 项目语言级别”设置为8。

  2. 在“文件”>“项目结构”>“平台设置”下,转到“项目”>,确保您的JDK主目录路径设置为1.8(对于65或更高版本,最新为112)。

如果上述方法不起作用,请检查编译器的目标字节码版本,然后继续进行可能的原因2。

可能的原因2:编译器

  1. 文件>设置>构建,执行,部署>在编译器下,转到Java编译器>将项目字节码版本设置为1.8,并将所有目标字节码版本设置为模块。单击“ 应用”,然后单击“ 确定”。重新启动您的IntelliJ IDE。目前,Lambda表达式已在我的IDE中接受。

最好的祝愿 :)


2
这差不多是三年前。
Czipperz

这是供使用Google的人检查是否已解决的问题。从事该行业的人都知道这一点。
kuzevni

0

对我而言,所提供的解决方案均无效。

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



-1

为Ecplise支持lambda表达式:

  1. 确保您使用的是JDK 1.8(“窗口”>“首选项”>“已安装的JRE和编译器”);
  2. 如果定义了任何新的功能接口,请使用注释@FunctionalInterface,以便eclipse会建议您进行与Lambda(功能接口)有关的重构。

-1

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

如果是这样,请继续执行以下步骤。

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

项目

1.File-> Project Structure-> Project-> Project语言级别将其更改为8以使Lamba表达式起作用

2.File-> Project Structure-> Module-> Project语言级别将其更改为8以使Lamba表达式起作用


-1

此答案不适用于新的更新的智能...。

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.