在 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)。
换句话说,您定义或使用一个函数式接口(interface)(即具有单个方法的接口(interface)),它可以准确地接受并返回您想要的内容。
从 Java 8 开始,java.util.function
中有一组常用的接口(interface)类型。 .
对于这个特定的用例,有 java.util.function.IntBinaryOperator
与 a single int applyAsInt(int left, int right)
method ,所以你可以像这样编写你的 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);
}
然后以 lambda 作为参数调用方法:
public static void main(String[] args) {
TwoArgIntOperator addTwoInts = (a, b) -> a + b;
int result = method(addTwoInts);
System.out.println("Result: " + result);
}
使用您自己的界面的好处是您可以使用更清楚地表明意图的名称。
关于java - 如何在 Java 8 中定义一个将 lambda 作为参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604703/