IntelliJ:求值lambda表达式在调试时引发编译错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IntelliJ:求值lambda表达式在调试时引发编译错误相关的知识,希望对你有一定的参考价值。

我想用Intellij'评估代码片段'功能评估包括lambda表达式的代码。但随后,Intellij引发了一个错误Unable to compile for target level 1.8. Need to run IDEA on java version at least 1.8, currently running on 1.6.0_65-b14-462-11M4609

评估代码非常简单,如下所示。

Set<Integer> set = new HashSet<>();
set.add(1);
set.stream().map(v->v).collect(Collectors.toSet());

我的Intellij版本是14.0.3,根据official document,版本14支持lambda表达式评估。

该功能如何可用?

答案

即使在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> 
另一答案

汇总来自adrian langeBohuslav Burghardt的评论,要么升级到Java 1.8捆绑的最新IntelliJ 14.1,要么将当前的IntelliJ切换为使用Java 1.8。见bug IDEA-132099

要切换到Java 1.8:

  1. 安装Java 8
  2. 将IntelliJ更改为使用Java 8.请参阅these instructions.Project structure
另一答案
Unable to compile for target level 1.8...Currently running on version 1.6

我的猜测是你的项目是在不支持lambdas的Java版本上运行的。确保安装了Java 8,并确保将项目级别更改为使用Java 8,如下所示:请注意,它明确提到了lambdas

另一答案

您可以切换JDK的运行时版本:

  1. 启动IDE,帮助|找到操作(在Mac上按Ctrl + Shift + A或Cmd + Shift + A),键入“Switch IDE Boot JDK”,按Enter键。
  2. 启动IDE,使用Help |找到操作(在Mac上按Ctrl + Shift + A或Cmd + Shift + A),键入“Switch IDE Boot JDK”,按Enter键。出现“切换IDE启动JDK”对话框。从下拉列表中选择版本,或单击“...”条目以指定自定义位置。

以上是关于IntelliJ:求值lambda表达式在调试时引发编译错误的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ Idea中使用Java8新特性lambda表达式

带有 Android SDK 的 intellij:-source 1.7 中不支持 lambda 表达式

在 intellij 上调试评估表达式

远程调试 msvsmon.exe VS2015 或无法附加到进程时,表达式求值器出现内部错误。 RPC 服务器不可用

Lambda 函数与表达式

Lambda表达式