ラムダ:ローカル変数にはfinalが必要だが、インスタンス変数には必要ない
2023-08-14 17:08:53
質問
ラムダでは、ローカル変数はfinalにする必要がありますが、インスタンス変数はfinalにする必要はありません。なぜでしょうか?
どうすれば解決するのか?
フィールドとローカル変数の根本的な違いは、ローカル変数が コピーされた というように、JVMがラムダインスタンスを生成する際にコピーされます。一方、フィールドは自由に変更することができます。なぜなら、フィールドへの変更は外部のクラスインスタンスにも伝搬されるからです(フィールドの スコープ は外のクラス全体に及ぶ)。
匿名クラス、クロージャ、Labmdasについて考える最も簡単な方法は 変数スコープ の観点からです。クロージャに渡すすべてのローカル変数に対してコピーコンストラクタが追加されていると想像してください。
関連
-
アクセス制限の解決方法: ---- in Java
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
-
[解決済み】finalとeffectly finalの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析