在Java8中,如何定义一个将lambda作为参数的方法?

在Java8中,方法可以创建为Lambda表达式,并且可以通过引用传递(只需做一点工作)。在线上有很多创建lambda并与方法一起使用的示例,但是没有关于如何创建以lambda为参数的方法的示例。它的语法是什么

MyClass.method((a,b)->a+b);
类MyClass{
//如何定义此方法?
静态整数方法(λl){
返回l(5,10);
}
}

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

换句话说,您定义或使用一个函数接口(即具有单个方法的接口),该接口完全接受并返回您想要的内容

为此,Java 8在java.util.function(感谢Maurice Naftalin了解关于JavaDoc的提示)

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

静态int方法(IntBinaryOperator op){
返回op.applyAsInt(5,10);
}

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

公共接口TwoArgIntOperator{
公共int op(int a、int b);
}
//其他地方:
静态int方法(TwoArgIntOperator运算符){
返回操作符op(5,10);
}

然后使用lambda作为参数调用该方法:

公共静态void main(字符串[]args){
TwoArgIntOperator addTwoInts=(a,b)->a+b;
int结果=方法(addTwoInts);
System.out.println(“结果:”+结果);
}

使用您自己的接口的优点是,您可以使用更清楚地指示意图的名称

发表评论