Lambda recursive ...

Aleksey Shipilev aleksey.shipilev at oracle.com
Fri Oct 19 06:18:53 PDT 2012


On 10/19/2012 05:09 PM, Boaz Nahum wrote:
> interface FactInt { int invoke(int i); }
> 
>  FactInt factorial = i ->
>                 { return i == 0 ? 1 : i * factorial.invoke(i - 1); };
> 
> But the compile (b61) says:
> error: variable factorial might not have been initialized
> 
> How can I write recursive expression like this ?

Lambda can not capture the uninitialized local variable; the trick is to
use fields, in which case lambda will capture "this" or the reference to
static field [1].

-Aleksey.

[1]
https://github.com/shipilev/jdk8-lambda-samples/blob/master/src/test/java/net/openjdk/lambda/FibonacciTest.java



More information about the lambda-dev mailing list