我正在阅读其他人的代码,他有以下两种方法:
public static double fac(double d) {
return d <= 0 ? 1 : d * fac(d - 1);
}
public static DoubleUnaryOperator getfun() {
return LamdaTests::fac; // LamdaTests is the classname of this class
}
首先,我正在尝试理解lambda表达式/方法引用。
我有两个问题:
1)getFun()方法究竟做了什么?它应该在这个类LambdaTests中调用fac(double d)方法吗?但是使用哪个参数以及返回值如何成为DoubleUnaryOperator,“LamdaTests:fac”不应该返回一个double?
2)在这种情况下,Lamdatests :: fac的等效Lamda表达式是什么?
编辑:据我所知
return LamdaTests::fac;
应该等于
return x -> fac(x);
但我只是不明白从哪里得到论证x。
答案 0 :(得分:1)
getFun
不会打电话给任何人。它只返回对fac
函数的引用。您需要仍然调用返回的函数来获得结果。 getFac
在这里不是很有用,所以这可能是令人困惑的事情。实际上,您只需直接使用LamdaTests::fac
,除非该方法是私有的。
对于后一个问题,请这样考虑:
x -> fac(x)
是一个带双精度并返回double的函数。什么是fac
?它是一回事:一个带双精度并返回双精度的函数。这个论点只是隐含在这里。