ホームページ > Java > &#&チュートリアル > Java のラムダ式に「最終」または「事実上最終」変数が必要なのはなぜですか?

Java のラムダ式に「最終」または「事実上最終」変数が必要なのはなぜですか?

DDD
リリース: 2024-12-23 03:15:13
オリジナル
1008 人が閲覧しました

Why Do Lambda Expressions in Java Require

ラムダ式には「最終」または「実質的に最終」の変数が必要です

エラー メッセージ「ラムダ式で使用される変数は最終的または有効である必要があります」 「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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート