在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