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

在Java 8中,如何定义将lambda作为参数的方法?

章绪
2023-03-14
问题内容

在Java
8中,可以将方法创建为Lambda表达式,并可以通过引用将其传递(在后台进行一些工作)。在线上有很多示例,其中创建了lambda并将其与方法一起使用,但是没有如何使用lambda作为参数的方法的示例。它的语法是什么?

MyClass.method((a, b) -> a+b);


class MyClass{
  //How do I define this method?
  static int method(Lambda l){
    return l(5, 10);
  }
}

问题答案:

Lambda纯粹是一个调用站点构造:Lambda的接收者不需要知道Lambda涉及到,而是接受具有适当方法的Interface。

换句话说,您定义或使用一个功能接口(即具有单个方法的接口)来接受并准确返回您想要的内容。

为此,Java
8附带了一组常用的接口类型java.util.function(感谢Maurice
Naftalin
提供有关JavaDoc的提示)。

对于此特定用例,java.util.function.IntBinaryOperator只有一个int applyAsInt(int left, int right)方法,因此您可以这样编写method

static int method(IntBinaryOperator op){
    return op.applyAsInt(5, 10);
}

但是您也可以定义自己的接口并像这样使用它:

public interface TwoArgIntOperator {
    public int op(int a, int b);
}

//elsewhere:
static int method(TwoArgIntOperator operator) {
    return operator.op(5, 10);
}

使用您自己的界面的优点是您可以使用更清楚地表明意图的名称。



 类似资料:
  • 目前正在学习Java 8 lambda表达式和方法引用。 我想把一个没有参数和返回值的方法作为参数传递给另一个方法。我就是这样做的: 我知道如

  • 如果我更改了方法的名称,它会进行编译,但它不会重写toString,因此print方法不会打印预期的内容。 这是试图定义一个日志子系统,该子系统仅在需要时(当它真的要打印时)对lambda求值,但与非lambda参数兼容。我知道其他的方法来实现它,但我想知道为什么我不能这样做,如果有一个变通办法或我做错了什么,

  • 最近我在使用c语言时遇到了一些问题,基本上是这样的: 在一个函数(比如intmain)中,我声明了一个变量Y=5,我有一个lambda函数,它接收一个值并将Y相加; 我的问题是:我需要将这个lambda函数传递给一个已经存在的函数,这样它就可以在另一个函数内部调用。 我尝试了几件事,但没有一个像我预期的那样工作(有些甚至不起作用): 另一个问题是我不能改变我的receives函数签名,因为代码的剩

  • 问题内容: 码: 当我尝试: 我在Eclipse中收到错误。 但当: 一切都好。为什么会有这种差异?谢谢。 问题答案: 因为语法是特殊的语法糖,仅在初始化数组变量时才适用。这是因为任务本身缺少类型信息;但是在赋值的特殊情况下,类型是从变量中完全推断出来的。 在第一个示例中,编译器知道您要分配给它(是),因此允许使用此语法。在后者中,您无需初始化变量(并且由于Java类型推断的弱点,它甚至也无法完全

  • 我有一个lambda表达式,我希望能够传递和重用。代码如下: 这里的关键是,我希望能够将我在这里使用的lambda表达式传递到调用此代码的方法中,以便可以重用它。lambda表达式是我的。查询方法。我假设我想使用Action或Func,但我不太确定它的语法是什么,或者它是如何工作的。谁能给我举个例子吗?

  • 根据这个答案,我可以将函数作为参数传递 https://stackoverflow.com/a/33402863/5709159 所以,实际上有两个问题 如果有可能,将函数定义为可空,以使此方法具有重载 如何传递非当前类的函数?例如