【问题标题】:Meaning of lambda () -> { } in JavaJava 中 lambda () -> { } 的含义
【发布时间】:2019-02-16 23:07:48
【问题描述】:

我正在查看以下 Stack Overflow 答案: How to change Spring's @Scheduled fixedDelay at runtime

在代码中有如下一行:

schedulerFuture = taskScheduler.schedule(() -> { }, this);

我想知道 lambda () -> {} 在该代码中的含义。我需要在不使用 lambda 的情况下编写它。

【问题讨论】:

  • Runnable 什么都不做。
  • 第一个参数是可运行的,因此您传递的是 Runnable 实例的匿名类,其中 run 方法什么都不做,即为空。
  • 如果没有 lambda,您需要传递一个空主体的匿名 Runnable,例如 new Runnable(){ @Override public void run(){} }

标签: java lambda java-8 java-7 java-9


【解决方案1】:

它是一个 Runnable,带有一个空的 run 定义。这个的匿名类表示是:

new Runnable() {
     @Override public void run() {
          // could have done something here
     }
}

【讨论】:

【解决方案2】:

Lamda 表达式是一个匿名函数,它允许您将方法作为参数传递,或者简单地说,这是一种帮助您删除大量样板代码的机制。它们没有访问修饰符(private、public 或 protected),没有返回类型声明,也没有名称。

让我们看看这个例子。

(int a, int b) -> {return a > b}

在您的情况下,您可以执行以下操作:

schedulerFuture = taskScheduler.schedule(new Runnable() {
     @Override 
     public void run() {
        // task details
     }
}, this);

【讨论】:

    【解决方案3】:

    对于 lambda:

    左边是参数,你拿什么。包含在() 中的是这个函数接受的所有参数

    -> 表示它是一个函数,它将左边的内容传递给右边进行处理

    右侧是主体 - lambda 的作用。包含在 {} 中的是这个函数所做的一切

    在你弄清楚之后,你只需要知道该构造传递了一个匹配类的实例(看看schedule() 调用中预期的参数类型是什么),它的唯一方法与我们的 lambda 表达式完全相同'刚刚分析过。

    【讨论】:

      【解决方案4】:

      Lambda 表达式基本上表达了函数式接口的实例。 在某种程度上 Lambda 表达式将是:(lambda operator params) -> {body}

      () -> System.out.println("这意味着 Lambda 表达式不带任何参数");

      (p) -> System.out.println("带一个参数的Lambda表达式:" + p);

      【讨论】:

      • 这不能回答问题 - 为什么是空的 lambda。这只是对什么是 lambdas 的一般解释。
      • @Andrejs,你为什么拒绝,投票给我。你看到用户在这里问了什么吗?让我为你重复一遍。这是问题的最后一行“我想知道 lambda () -> {} 在该代码中的含义。我需要在不使用 lambda 的情况下编写它。”他被问到 ()​​ -> {} 的含义
      猜你喜欢
      • 1970-01-01
      • 2011-12-07
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多