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

在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作为参数的方法? 的全部内容, 来源链接: utcz.com/qa/431032.html

回到顶部