内部の匿名クラスで非最終変数を参照することがJavaで不可能であるのはなぜですか?

dhblah:

重複の可能性:
別のメソッドで定義された内部クラス内の非final変数を参照できません

内部の匿名クラスで非最終変数を参照することがJavaで不可能であるのはなぜですか?簡単な答えは「禁止されているから」ですが、なぜこの便利な機能が禁止されたのでしょうか。たぶん、Javaに欠けている、または「間違った」方法で設計された、ある種の機能があるかもしれません。知りたいのですが。

マティアス・シュワルツ:

その理由は、囲んでいるメソッドが戻った後、ローカル変数が存在しなくなったためです。したがって、匿名クラスがインスタンス化されると、変数のコピーが作成されます。Javaが後でローカル変数の変更を許可した場合、匿名クラスは古い値のみを認識します。

Javaの方法は、他の言語で知られている実際のクロージャーとは対照的です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

最大限にまとまりのあるクラスを作成することが推奨されない、または不可能なのはなぜですか?

分類Dev

Javaで匿名の内部クラスを静的にすることは可能ですか?

分類Dev

Javaクラスを抽象的かつ最終的にすることができないのはなぜですか

分類Dev

Java-内部クラスから変数を参照することは最終的/事実上最終的なループでなければなりません

分類Dev

コンパイラが内部クラスで非最終変数を受け入れるのはなぜですか?

分類Dev

別のメソッドで定義された内部クラス内の非最終変数lblNewLabelを参照することはできません

分類Dev

コピー不可能なタイプのメンバー変数(または基本クラス)を初期化することは可能ですか?

分類Dev

匿名の内部クラスをその名前で参照するのは、それがメンバーであるのに変数ではないのになぜ機能するのですか?

分類Dev

「別のメソッドで定義された内部クラス内の非最終変数iを参照できない」と表示されているのはなぜですか?

分類Dev

特性でthis-constructorを定義することが不可能なのはなぜですか?

分類Dev

NSNotificationCenterでは強力な参照サイクルが可能であるのにUIView.animateWithDurationでは不可能なのはなぜですか?

分類Dev

Java-匿名内部クラスでの非最終変数の使用?

分類Dev

Java内部クラスに「最終的な」外部インスタンス変数が必要なのはなぜですか?

分類Dev

Javaがクラスレベルの変数を匿名の内部クラスに再割り当てできるのはなぜですか?

分類Dev

最終的なローカル変数にアクセスするときにJavaでこのInstantiationExceptionが発生するのはなぜですか?

分類Dev

変換コンストラクターでこれを参照する必要があるのはなぜですか?

分類Dev

非定数の静的変数をクラスの外部で初期化する必要があるのはなぜですか?

分類Dev

メソッド参照で非最終変数を使用できるのはなぜですか?

分類Dev

非最終変数の参照:なぜこのコードはコンパイルされるのですか?

分類Dev

元のリストがある場合、変更不可能なリストを変更できるのはなぜですか?

分類Dev

Javaがここで変数ではなくクラスを期待するのはなぜですか?

分類Dev

インスタンスブロックで最終的な静的変数に値を割り当てることができないのはなぜですか?

分類Dev

変更不可能なマップの変更可能なコピーを作成することは可能ですか?

分類Dev

匿名クラスでアクセスできるのは最終的な変数だけなのはなぜですか?

分類Dev

android.os.Bundleが最終クラスであるのはなぜですか?

分類Dev

Scalaで `var`を` def`でオーバーライドすることが不可能なのはなぜですか?

分類Dev

「候補コンストラクターが実行不可能」になるのはなぜですか?

分類Dev

2つの推定変数を匿名クラスとして相互に割り当てることができないのはなぜですか?

分類Dev

あるメモリが必要かどうかを知ることが決定不可能なのはなぜですか?

Related 関連記事

  1. 1

    最大限にまとまりのあるクラスを作成することが推奨されない、または不可能なのはなぜですか?

  2. 2

    Javaで匿名の内部クラスを静的にすることは可能ですか?

  3. 3

    Javaクラスを抽象的かつ最終的にすることができないのはなぜですか

  4. 4

    Java-内部クラスから変数を参照することは最終的/事実上最終的なループでなければなりません

  5. 5

    コンパイラが内部クラスで非最終変数を受け入れるのはなぜですか?

  6. 6

    別のメソッドで定義された内部クラス内の非最終変数lblNewLabelを参照することはできません

  7. 7

    コピー不可能なタイプのメンバー変数(または基本クラス)を初期化することは可能ですか?

  8. 8

    匿名の内部クラスをその名前で参照するのは、それがメンバーであるのに変数ではないのになぜ機能するのですか?

  9. 9

    「別のメソッドで定義された内部クラス内の非最終変数iを参照できない」と表示されているのはなぜですか?

  10. 10

    特性でthis-constructorを定義することが不可能なのはなぜですか?

  11. 11

    NSNotificationCenterでは強力な参照サイクルが可能であるのにUIView.animateWithDurationでは不可能なのはなぜですか?

  12. 12

    Java-匿名内部クラスでの非最終変数の使用?

  13. 13

    Java内部クラスに「最終的な」外部インスタンス変数が必要なのはなぜですか?

  14. 14

    Javaがクラスレベルの変数を匿名の内部クラスに再割り当てできるのはなぜですか?

  15. 15

    最終的なローカル変数にアクセスするときにJavaでこのInstantiationExceptionが発生するのはなぜですか?

  16. 16

    変換コンストラクターでこれを参照する必要があるのはなぜですか?

  17. 17

    非定数の静的変数をクラスの外部で初期化する必要があるのはなぜですか?

  18. 18

    メソッド参照で非最終変数を使用できるのはなぜですか?

  19. 19

    非最終変数の参照:なぜこのコードはコンパイルされるのですか?

  20. 20

    元のリストがある場合、変更不可能なリストを変更できるのはなぜですか?

  21. 21

    Javaがここで変数ではなくクラスを期待するのはなぜですか?

  22. 22

    インスタンスブロックで最終的な静的変数に値を割り当てることができないのはなぜですか?

  23. 23

    変更不可能なマップの変更可能なコピーを作成することは可能ですか?

  24. 24

    匿名クラスでアクセスできるのは最終的な変数だけなのはなぜですか?

  25. 25

    android.os.Bundleが最終クラスであるのはなぜですか?

  26. 26

    Scalaで `var`を` def`でオーバーライドすることが不可能なのはなぜですか?

  27. 27

    「候補コンストラクターが実行不可能」になるのはなぜですか?

  28. 28

    2つの推定変数を匿名クラスとして相互に割り当てることができないのはなぜですか?

  29. 29

    あるメモリが必要かどうかを知ることが決定不可能なのはなぜですか?

ホットタグ

アーカイブ