Java 单例模式

编辑:已回答 - 错误是方法不是静态的

我使用了单例设计模式

 public class Singleton {
   private static final Singleton INSTANCE = new Singleton();

   // Private constructor prevents instantiation from other classes
   private Singleton() {}

   public static Singleton getInstance() {
      return INSTANCE;
   }
 }

我的问题是,如何在一个类中创建类 Singleton 的对象?

我试过了:

Singleton singleton = new Singleton(); 
// error - constructor is private
Singleton singleton = Singleton.getInstance();
// error - non-static method cannot be referenced from a static context

什么是正确的代码?

谢谢,斯宾塞


答案 1
Singleton singleton = Singleton.getInstance();

是正确的方法。确保您的方法确实是 .getInstance()static

由于您的实现远非安全 - 您的对象可以通过反射实例化,因此您可能希望基于枚举创建单例Singleton


答案 2

Singleton singleton = Singleton.getInstance();应该工作 - 考虑到你的代码,这个错误没有意义;您确定报告正确吗?(如果您忘记使该方法成为静态方法,这将是有道理的,您已经在上面的代码中完成了此操作。getInstance

您为该类提供的代码是正确的。

最后,一个概念性说明:首先,你不是在“创建一个类单例的对象”——这就是单例的全部意义。:)您只是获取对现有对象的引用。