在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
对于此特定用例,java.util.function.IntBinaryOperator只有一个int applyAsInt(int left, int right)方法,因此您可以这样编写method:
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); }
使用您自己的界面的优点是您可以使用更清楚地表明意图的名称。