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

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

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

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


当前回答

即使在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> 

其他回答

IntelliJ IDEA:

在文件菜单→项目结构→项目,将项目语言级别更改为8.0 - Lambdas,输入注释等。

Android 3.0+ Go文件→项目结构→模块→应用程序和属性选项卡设置源兼容性和目标兼容性为1.8 (Java 8)

截图:

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

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

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

项目

1.文件->项目结构->项目->项目语言级别 将其更改为8,lamba表达式才能工作 2.文件->项目结构->模块->项目语言级别 将其更改为8,lamba表达式才能工作

同样的项目(Android Studio 3.3.2, gradle-4.10.1-all.zip, compileSdkVersion 28, buildToolsVersion '28.0.3') 在新的快速Windows机器上运行良好,在旧的Ubuntu 18.04笔记本电脑上用红色下划线标出Java 8的内容(但是项目在Ubuntu上编译没有错误)。

我只改变了两件事,迫使它停止用红色下划线是排除增量true和dexOptions

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

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

在应用级build.gradle中。

检查以下设置:

文件->项目结构->项目标签。 项目SDK应设置为8或以上 文件- >项目结构- >模块。 *检查您或所有模块的语言级别设置为8或以上 文件->设置(或其他设置->首选项在新Idea版本的新项目) *搜索Java编译器,检查项目字节码版本 并且每个模块的字节码版本设置为8或以上

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

为lambda表达式提供Ecplise支持:

确保您使用的是JDK 1.8 (windows > Preferences > Installed JREs and Compiler); 如果您定义了任何新的函数接口,请使用注释@FunctionalInterface,这样eclipse就会建议您重构与Lambdas(函数接口)相关的结构。