Java 8 引入了 lambda 函数,我想实现阶乘之类的东西:
IntToDoubleFunction fact = x -> x == 0 ? 1 : x * fact.applyAsDouble(x-1);
编译返回
error: variable fact might not have been initialized
如何引用函数本身。类是匿名的,但实例存在:它被称为fact
。
最佳答案
我通常使用(一次定义所有功能接口(interface))通用帮助器类,它包装功能接口(interface)类型的变量。 这种方式解决了局部变量初始化的问题,并且让代码看起来更清晰。
对于这个问题,代码将如下所示:
// Recursive.java
// @param <I> - Functional Interface Type
public class Recursive<I> {
public I func;
}
// Test.java
public double factorial(int n) {
Recursive<IntToDoubleFunction> recursive = new Recursive<>();
recursive.func = x -> (x == 0) ? 1 : x * recursive.func.applyAsDouble(x - 1);
return recursive.func.applyAsDouble(n);
}
关于java - 使用 Java 8 实现递归 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33879299/