public class Main {
public static void main(String[] args) {
int count = 0;
Runnable r = () -> System.out.println(count);
count++;
r.run();
}
}
選択肢
- あなたの回答
- 正解
正解
C. コンパイルエラーになる
詳細解説
ラムダ式が参照するローカル変数は final または effectively final(事実上変更されない)でなければなりません。count++ によって count が変更されているため条件を満たさずコンパイルエラーになります。
なぜ他の選択肢が違うのか
- count++ があるためラムダ内で count を参照できません。
- count が変更されているためコンパイルエラーになります。
- コンパイル段階でエラーになるため実行されません。
罠ポイント
effectively final とは final と宣言していなくても再代入が一切ない変数のことです。