見出し画像

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】

この記事が気に入ったらサポートをしてみませんか?