方法参考和Lambda表达式

时间:2018-03-10 16:21:07

标签: java lambda

我正在阅读其他人的代码,他有以下两种方法:

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。

1 个答案:

答案 0 :(得分:1)

getFun不会打电话给任何人。它只返回对fac函数的引用。您需要仍然调用返回的函数来获得结果。 getFac在这里不是很有用,所以这可能是令人困惑的事情。实际上,您只需直接使用LamdaTests::fac,除非该方法是私有的。

对于后一个问题,请这样考虑:

x -> fac(x)

是一个带双精度并返回double的函数。什么是fac?它是一回事:一个带双精度并返回双精度的函数。这个论点只是隐含在这里。