ホームページ >Java >&#&チュートリアル >Java のラムダ式に「最終」または「事実上最終」変数が必要なのはなぜですか?
ラムダ式には「最終」または「実質的に最終」の変数が必要です
エラー メッセージ「ラムダ式で使用される変数は最終的または有効である必要があります」 「final」は、ラムダ式内で使用される変数が効果的に考慮されるためには、final として宣言されるか、特定の基準を満たす必要があることを示します。 Final.
提供されたコード スニペット内:
private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) { // Code missing cal.getComponents().getComponents("VTIMEZONE").forEach(component -> { // Code missing if (calTz == null) { calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue()); } }); // Code missing }
ラムダ式内で calTz 変数が Final として宣言されていないため、エラーがスローされます。 Java では、同時実行性の問題の可能性を防ぐために、ラムダ式で使用される変数が Final または実質的に Final であることが必要です。
要件が存在する理由
Java 言語仕様 (§15.27.2) ) 状態:
実質的な最終変数への制限により、動的に変化するローカル変数へのアクセスが禁止されます
本質的に、Java はラムダ式内でキャプチャされた変数の変更を防ぐことで同時実行性のリスクを軽減することを目的としています。これは、マルチスレッド環境で予測可能で正しい動作を保証するのに役立ちます。
したがって、スレッドの安全性を確保し、同時実行性の問題を防ぐために、ラムダ式で使用される変数は、final または事実上 Final として宣言する必要があります。つまり、ラムダ式内で変数を変更することはできません。範囲。
以上がJava のラムダ式に「最終」または「事実上最終」変数が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。