由null引用的Singleton类对象

时间:2016-03-26 14:34:06

标签: java design-patterns singleton

我有一个单例类,它的实例在我的项目中的许多地方被引用。现在我看到一个这样的地方,其中单例实例被赋予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();
   }
}

1 个答案:

答案 0 :(得分:2)

不,只有test中的局部变量main设置为null。

Test.INSTANCE仍然指向单个全局实例。由于它是一个枚举,你甚至不能强迫Test.INSTANCE为空。

但请考虑以下(反)示例,了解如何将静态引用重置为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
   }
}