当前位置: 首页 > 面试题库 >

使用lambda表达式编译代码时出错

查宜民
2023-03-14
问题内容

我有以下代码:

package com.mongoDB;

import spark.Spark;

public class HelloWorldSparkStyle {
   public static void main(String[] args) {
       Spark.get("/hello", (req, res) -> "Hello World");
   }
}

当我通过main方法运行它时,它运行良好,但是当我尝试对其进行编译时,抛出以下错误:

\HelloWorldSparkStyle.java:[9,33] error: lambda expressions are not supported in -source 1.5

D:\WorkspaceWithJava8\BeginnerProject>javac -version
javac 1.8.0_60

我正在使用Eclipse IDE,并尝试通过命令行进行编译。


问题答案:

默认情况下,maven-compiler-plugin使用Java
5来编译类。引用其文档:

还要注意,当前的默认源设置是1.5,默认目标设置是1.5,与运行Maven的JDK无关。如果要更改这些默认值,则应按照设置Java编译器的-
source和-target中所述设置源和目标。

您需要将其配置为使用Java 8,如下所示:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.3</version>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
</plugin>


 类似资料:
  • 我现在正在学习如何使用lambda表达式,我已经看到了一些带有简单示例的教程: 但是我的编译器显示这个错误: 我是不是忘了什么?

  • 我正在使用NetBeans 8。当我的代码包含Lambda表达式并尝试编译时,我会收到以下错误消息:

  • 问题内容: 我正在使用NetBeans8。当我的代码包含Lambda表达式并尝试编译时,出现以下错误消息: 问题答案: 将源代码的编译器版本更改为jdk 8的项目属性,然后首先检查是否已安装。

  • 问题内容: 考虑以下Java 8代码段。 什么是越来越编译? 我知道Lambda并没有实现为匿名内部类。但是,因此接口必须在生成某种对象,但是尚不清楚在生成哪种对象。 Java 8中是否存在某种表示lambda表达式的新型对象? 更新 这是经过反编译的程序,该程序已使用eclipse java 8编译器编译,当您打开类文件时,以下输出来自eclipse。 看起来lambda表达式已变成包含lamb

  • 我使用的是MSVS c 17,下面的代码无法编译: 在函数“makeIndices”中,我标记了出现错误的地方。它看起来像: 错误C2131:表达式未计算为常量 注意:失败是由于在变量的生命周期之外读取了变量导致的 注:参见“pred”的用法 注意:请参阅对函数模板实例化“auto makeIndices”的引用 上面的代码在GCC(Link)中编译并正常工作。 但是如何为MSVS修复它呢?

  • 我试图创建一个使用Java的lambda表达式的示例,我使用的是官方的JDK8。我的例子运行成功。但是当我试图检查编译器如何将lambda表达式翻译成字节代码时,这让我有些困惑。下面是我的示例的代码:- 在本文中,他们讨论了编译器如何将lambda表达式转换为字节码。根据本文将lambda表达式转换为方法以及lambda表达式声明的位置,有lambda方法的引用。下面的例子在文章中: 我的例子运行