2012-03-02 10 views
7

一部のクラスには到達できないと考えられますが、到達可能なクラスによって生成された別の匿名クラスがあります。最初のものはガベージコレクタによって削除できますか?Java匿名クラスとガベージコレクタ

例:すべての非静的内部クラスは、その外側のクラスのインスタンスへの暗黙rerefenceを有するので


class Outer { 
    public Object getInner() { 
    return new Object() {}; 
    } 
} 

... 

Outer outer = new Outer(); 
Object inner = outer.getInner(); 

// Could the "outer" instance be removed here considering that "inner" is using below? 
+0

あなたのコードでは、あなたは 'Outer'クラスからメソッドを呼び出しています。おそらくどこに達することができますか? – Marcelo

答えて

8

なし、外側のインスタンスは、この場合には依然として到達可能です。

+0

違いは、私の例の匿名クラスは、外部クラスへの参照を明示的に(内部的にも外部的にも)使用していないことです。だから、実際には外部のクラスには到達できないと思う。 –

+4

まだ参照があります。また、JVMはこの参照が決して使用されないことを知ることができません。この外部参照を決して使用しない場合、クラスは静的内部クラスまたは最上位クラスでなければなりません。 –

+0

今すぐ明らかになります。ありがとうございました! –