2016-03-26 6 views
1

私はシングルトンクラスを持ち、そのインスタンスはプロジェクトの多くの場所で参照されています。これで、シングルトンインスタンスにNULL参照が割り当てられている場所が1つ見つかります。nullで参照されるシングルトンクラスオブジェクト

質問は次のとおりです。1.ヌル参照の残りの部分を指し示しますか? 2.これが当てはまる場合、どうすればこの問題を回避できますか?

ここにコードスニペットがあります。

public enum Test { 
    INSTANCE; 
     public void fun(){ 
     System.out.println("hello"); 
    } 
} 

public class Main { 

    public static void main(String[] args) { 
     Test test = Test.INSTANCE; 
     test.fun(); 
     test = null; 
     test.fun(); 
    } 
} 
+0

インスタンスがある一箇所に」により、*正確に*何を意味するのかヌル参照が割り当てられていますか?例を挙げると助けが簡単になります。もちろん、その振る舞いがどのようなものであるかがわかります。 –

+0

いいえ、他の場所ではnullを指しません。 –

答えて

2

いいえ、唯一main内のローカル変数testがnullに設定されています。

Test.INSTANCEは、引き続き1つのグローバルインスタンスを指します。列挙型なので、Test.INSTANCEを強制的にnullにすることはできません。


しかし、静的参照がnullにリセットすることができる方法で、以下の(反)の例を考えてみます。

public class Test { 
    public static Test INSTANCE = new Test(); 

    public void fun(){ 
     System.out.println("hello"); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     Test test = Test.INSTANCE; 
     test.fun(); 
     test = null; // test is null, but Test.INSTANCE still points to the global instance 
     Test.INSTANCE = null; // now even Test.INSTANCE is null 
    } 
} 
関連する問題