我试图了解lambda是如何工作的。在这个过程中,我找到了这个例子。
public class Calculator {
interface IntegerMath {
int operation(int a, int b);
default IntegerMath swap() {
return (a, b) -> operation(b, a);
}
}
private static int apply(int a, int b, IntegerMath op) {
return op.operation(a, b);
}
public static void main(String[] args) {
IntegerMath addition = (a, b) -> a + b;
Math subtraction = (a, b) -> a - b;
System.out.println(apply(5, 10, subtraction));
System.out.println(apply(5, 10, subtraction.swap()));
}
}
我正在尝试将交换方法的实现从lambda转换为普通方法。
但是我无法更改它,因为如果这样做,我应该编写操作方法的实现并创建一个无限递归。
public class Calculator {
interface IntegerMath {
int operation(int a, int b);
default IntegerMath swap() {
return new IntegerMath() {
@Override
public int operation(int a, int b) {
return operation(b, a);
}
};
}
}
}
我不能在IntegerMath接口的交换方法中使用lambda吗?
最佳答案
如果您要问如何从匿名实现中调用外部operation()
,可以这样进行:
return IntegerMath.this.operation(b, a);