【问题标题】:Functional interface as argument of the same功能接口作为相同的参数
【发布时间】:2016-02-09 18:32:43
【问题描述】:

在 Java 8 中使用 lambda 时,我遇到了以下函数式接口。

@FunctionalInterface
interface MyFunctional {
  void invokeSame(MyFunctional myFunc);
}

您能告诉我如何为这个函数式接口提供 lambda 表达式吗?

【问题讨论】:

    标签: lambda functional-programming java-8


    【解决方案1】:

    与任何其他一个参数和 void 返回类型 lambda 的方式相同:

    MyFunctional f = myFunc -> {};
    

    【讨论】:

      【解决方案2】:

      概念: java 8 lambdas 中的类型检查是基于目标(作为参数传递给它的函数)完成的。

      说明:一般一个函数由3个属性定义:

      1. 函数名称。
      2. 传递的参数的类型和顺序。
      3. 返回函数类型。

      但是在传递 lambda 时,Java 只检查最后两个。因此,对于上述函数式接口,我们需要具有 [first] 参数类型 MyFunctional 和返回类型 void 的 lambda。

      void doSomething(MyFunctional x) {
      ...
      ...
        x.invokeSame(...An object/lambda of type MyFunctional...)
      }
      
      To call this function
      doSomething(varName -> { ...someCode... })
      

      【讨论】:

        猜你喜欢
        • 2020-07-12
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-25
        相关资源
        最近更新 更多