[解決済み】finalとeffectly finalの違いについて
2022-03-25 14:40:10
質問
Java 8でラムダを使っていて、次のような警告に出くわした。
local variables referenced from a lambda expression must be final or effectively final
. 匿名クラスの中で変数を使用する場合、外側のクラスではfinalでなければならないことは知っています。
最終
と
実質的に最終
?
解決方法は?
<ブロッククオート... Java SE 8 からは、ローカルクラスは、final または実質的に final であるブロックのローカル変数とパラメーターにアクセスできます。 初期化された後、値が変更されない変数やパラメータは、実質的にfinalです。
例えば、変数
numberLength
が final と宣言されていない場合、マーク付きの代入文が
PhoneNumber
のコンストラクタを使用します。
public class OutterClass {
int numberLength; // <== not *final*
class PhoneNumber {
PhoneNumber(String phoneNumber) {
numberLength = 7; // <== assignment to numberLength
String currentNumber = phoneNumber.replaceAll(
regularExpression, "");
if (currentNumber.length() == numberLength)
formattedPhoneNumber = currentNumber;
else
formattedPhoneNumber = null;
}
...
}
...
}
この代入文のせいで、変数numberLengthは事実上finalではなくなりました。 その結果、Javaコンパイラーは「quot;内部クラスから参照されるローカル変数はfinalまたはeffective finalでなければならない"」のようなエラーメッセージを生成します。 ここで、インナークラス PhoneNumber は、変数 numberLength にアクセスしようとします。
http://codeinventions.blogspot.in/2014/07/difference-between-final-and.html
http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html
関連
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] タイプの安全性。アンチェック・キャスト
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Java 8のmap()メソッドとflatMap()メソッドの違いは何ですか?
-
[解決済み] Java 8 で java.util.stream.Stream からリストを取得する
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] アニメーションGIFの表示
-
[解決済み] init-paramとcontext-param
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] なぜ無名クラスではfinal変数しかアクセスできないのですか?
-
[解決済み】Javaスレッドにパラメータを渡すにはどうすればいいですか?
-
[解決済み】Javaでfinalキーワードを使用するとパフォーマンスが向上しますか?