2011-07-12 14 views
6

可能性の重複:
Cannot refer to a non-final variable inside an inner class defined in a different method内部匿名クラスの最終的でない変数を参照するのがJavaで不可能なのはなぜですか?

それは内部匿名クラスで非final変数を参照するためにJavaで不可能だのはなぜ?簡単な答えは「禁止されているため」ですが、私は知りたいのですが、なぜこの便利な機能を禁止しましたか?たぶんJavaには欠けている能力や「間違った」方法で設計された能力があります。私は知りたいです。

+0

この記事を見て、それは少し助けるかもしれません:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined- in-a-different – mandubian

+1

ここでは答える:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-different – Jacob

+0

@cularis、私はそれを見てきましたが、編集のために正しいと考えるべき答えがはっきりしません。 – dhblah

答えて

3

これは、囲みメソッドが返された後、ローカル変数が存在しなくなったためです。したがって、変数のコピーは、匿名クラスがインスタンス化されたときに作成されます。 Javaがローカル変数を後で変更できる場合、匿名クラスは古い値だけを知ります。

Javaのやり方は、他の言語から知られている実際のclosuresに反対しています。

+2

私匿名のクラスがコピーではなく変数を直接使用するという錯覚を維持し、誤った期待を持つ人々を避けることは禁止されています。 –

+0

Michael:まったく –

+0

あなたの答えをありがとうが、変数がコピーされているかどうかわからない。最終変数を完全に渡してから、匿名でそのフィールドの1つを変更し、その変更を囲む方法で見ることができるからです。 – dhblah

関連する問題