2

我的问题来自这个线程

考虑这段代码:

public class Test {    
    static Function<Integer, Integer> fibLambda = null;
    public static void main (String[] args) { 
        fibLambda = n -> n <= 2 ? 1 : fibLambda.apply(n - 1) + fibLambda.apply(n - 2); 
        System.out.println(fibLambda.apply(6));
    }
}

上面的输出是 8。

我不明白的是如何fibLamdba初始化?似乎我完全想念方法调用是如何完成的,因为我认为这段代码会产生 NPE。

希望我的问题很清楚

4

1 回答 1

6

您的代码相当于

static Function<Integer, Integer> fibLambda = null;

public static void main(String[] args) {
    fibLambda = n -> n <= 2 ? 1 : Example.fibLambda.apply(n - 1) + Example.fibLambda.apply(n - 2);
    System.out.println(fibLambda.apply(6));
}

apply被调用时,它fibLambda被分配了一个值。基本上,lambda 表达式不会捕获 的值fibLambda,它只是记录需要在适当的时刻评估变量以产生值。

请记住,lambda 表达式不会执行出现在其主体中的代码。它只是一个声明,类似于声明匿名类实例的方式。

于 2015-01-04T20:09:36.390 回答