Java Silver 12.4 ラムダ式からアクセスできる変数に関する問題
ラムダ式を囲むブロックの中で宣言されたローカル変数をラムダ式内で利用するには、その変数がfinalで宣言されているか、実質的にfinalでなければいけません。
設問のコードでは、変数はfinalで修飾されていません。そのため、コンパイルエラーが発生します。よって、選択肢Eが正解です。なお、次のようにfinalで修飾するとラムダ式内のコンパイルエラーは発生しませんが、変数iをインクリメントしている行でコンパイルエラーとなります。
// finalで修飾したローカル変数の値を変更(コンパイルエラー)
import java.util.function.Supplier;
public class Sample {
void sample() {
final int i = 25;
Supplier<Integer> foo = () -> i;
i++; // 変数の値を変更
System.out.println(foo.get());
}
}
【8.4】
この記事が気に入ったらサポートをしてみませんか?