Javaのラムダ式で再帰関数を書くのはちょっと面倒です。例として、フィボナッチ数列のN番目の項を再帰的に計算する関数(以降フィボナッチ関数)を考えます*1。次のコードはエラーになってしまいます。 IntUnaryOperator fib = n -> n <= 1 ? 1 : fib.applyAsInt(n - 1) + fib.applyAsInt(n - 2); // => エラー: 変数fibは初期化されていない可能性があります 代入演算子の右側、ラムダ式内の変数fibが初期化されていない、としてコンパイルエラーになってしまいました。 これは、ラムダ式においてローカル変数がキャプチャされるタイミングを考えると、仕方のないことです。ラムダ式内で参照されるローカル変数は、「実質的にfinal」な変数として、関数オブジェクト生成時にその値が渡されます。つまり、関数オブジェクトが生成される