Lambdas ではローカル変数は Final である必要があるのに、インスタンス変数にはその必要がないのはなぜですか?

Linda Hamilton
リリース: 2024-10-28 20:54:31
オリジナル
889 人が閲覧しました

Why Do Local Variables Need to Be Final in Lambdas, But Instance Variables Don't?

ラムダでローカル変数にはファイナリティが必要であるのに、インスタンス変数には必要がない理由

ラムダを使用するとき、ローカル変数のルールに遭遇したことがあるかもしれません。変数はラムダのスコープ内でfinalとして宣言する必要があります。ただし、インスタンス変数にはこの修飾は必要ありません。この違いは、ラムダのコンテキストにおける 2 つのタイプの変数間の基本的な違いに由来します。

ラムダ内のローカル変数は、JVM によってインスタンス化されるときにラムダに効果的にコピーされます。これは、ラムダ内のローカル変数に加えられた変更は、それを囲んでいるスコープ内の元の変数に影響を与えないことを意味します。したがって、偶発的な変更を防ぎ、不変性を確保するには、ローカル変数を Final として宣言する必要があります。

対照的に、インスタンス変数は、外側のクラス内で定義され、ラムダによって直接参照されます。ラムダ内のインスタンス変数に変更が加えられると、変更はそれを囲んでいるクラス インスタンスに伝播されます。これは、インスタンス変数のスコープが、それを囲んでいるクラス全体に拡張されるためです。

要約すると、ローカル変数は基本的にラムダのインスタンス化中にコピーされるため、ラムダ内でファイナリティが必要ですが、インスタンス変数はアイデンティティを維持するため、必要ありません。外側のクラス内のスコープ。

以上がLambdas ではローカル変数は Final である必要があるのに、インスタンス変数にはその必要がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!