Java でラムダ式を使用する場合、よく混乱するのは、インスタンス変数がなぜローカル変数にファイナライズが必要なのかということです。しないでください。この記事は、この区別の背後にある根本的な理由を明確にすることを目的としています。
ローカル変数: ファイナリティの命令
ラムダ式では、潜在的な競合を防ぐために、ローカル変数は Final としてマークされる必要があります。囲むスコープを使用します。これは、ラムダが呼び出されたときに、ローカル変数のコピーを含むローカル環境のスナップショットを作成するためです。ラムダの外部でこれらの変数にその後変更を加えても、ラムダ自体には反映されません。ファイナリティを強制することにより、JVM はローカル変数の値がラムダの存続期間内で一定のままであることを保証します。一方、
インスタンス変数: スコープの問題
インスタンス変数、ファイナライズは必要ありません。これは、それらがラムダのローカル環境内に保存されず、それを囲んでいるクラス インスタンスに属しているためです。インスタンス変数に加えられた変更は、ラムダ内とそれを囲んでいるクラスの両方で表示されます。したがって、ラムダのさまざまな呼び出し間でインスタンス変数の整合性を維持するためにファイナライゼーションは必要ありません。
基本的な違い: コピーと参照
間の重要な違いローカル変数とインスタンス変数は、ラムダ作成時の動作に依存します。ローカル変数はラムダの環境にコピーされ、インスタンス変数は参照されます。これは、ローカル変数への変更はラムダ内でのみ表示されるが、インスタンス変数への変更は基になるクラス インスタンスに影響を与えることを意味します。
結論
次の変数スコープの違いについてローカル変数とインスタンス変数は、Java でラムダ式を効果的に使用するために不可欠です。ローカル変数のファイナリティ要件を遵守し、インスタンス変数のスコープを認識することで、開発者は潜在的な落とし穴を回避し、コード内の一貫した動作を保証できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3