ラムダでローカル変数にはファイナリティが必要であるのに、インスタンス変数には必要がない理由
ラムダを使用するとき、ローカル変数のルールに遭遇したことがあるかもしれません。変数はラムダのスコープ内でfinalとして宣言する必要があります。ただし、インスタンス変数にはこの修飾は必要ありません。この違いは、ラムダのコンテキストにおける 2 つのタイプの変数間の基本的な違いに由来します。
ラムダ内のローカル変数は、JVM によってインスタンス化されるときにラムダに効果的にコピーされます。これは、ラムダ内のローカル変数に加えられた変更は、それを囲んでいるスコープ内の元の変数に影響を与えないことを意味します。したがって、偶発的な変更を防ぎ、不変性を確保するには、ローカル変数を Final として宣言する必要があります。
対照的に、インスタンス変数は、外側のクラス内で定義され、ラムダによって直接参照されます。ラムダ内のインスタンス変数に変更が加えられると、変更はそれを囲んでいるクラス インスタンスに伝播されます。これは、インスタンス変数のスコープが、それを囲んでいるクラス全体に拡張されるためです。
要約すると、ローカル変数は基本的にラムダのインスタンス化中にコピーされるため、ラムダ内でファイナリティが必要ですが、インスタンス変数はアイデンティティを維持するため、必要ありません。外側のクラス内のスコープ。
以上がLambdas ではローカル変数は Final である必要があるのに、インスタンス変数にはその必要がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。