6

メソッドローカル内部クラスのインスタンスは、メソッドの終了後もまだ生きている可能性があるため、メソッドローカル内部クラスはローカル変数にアクセスできません。ただし、ローカル メソッドが終了すると、ローカル変数は消えます。メソッド ローカルの内部クラスが final ローカル変数にアクセスできることを知りましたが、これはメソッドが終了した後も final ローカル変数がまだ生きているということですか?

4

2 に答える 2

8

並べ替え。Java の匿名内部クラスは「クロージャ」のように動作します。つまり、現在のローカル状態を「閉じます」。ただし、Java では、これらのクラスを final 変数で閉じることしかできません。そうでない場合、変数のローカル状態は変更される可能性がありますが、内部クラスに保持されているバージョンは変更されないため、「古い」インスタンスにアクセスすることになります。これは、プログラマにとって混乱を招く可能性があります。

代わりに、Java では、変数の再割り当てではなく、メソッドを介してインスタンスが可変性を処理する必要があります。これにより、より明確になり、より簡単なデバッグが可能になります。Java がこれを行う理由の詳細については、この回答を参照してください。

クラスはまだ変数への参照を保持しているため、質問への答えはyesです。そのインスタンスは、内部クラスが変数の所有権を放棄するまでガベージ コレクションされません。

于 2012-05-20T01:09:17.310 に答える
1

いいえ、そうではありません。これは、ローカル変数のコピーが内部クラス インスタンスでまだ生きていることを意味します。「最終」は、2 つのコピーの値が紛らわしく相違しないようにするだけです。

于 2012-05-20T02:20:57.393 に答える