首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java单例模式

Java单例模式
EN

Stack Overflow用户
提问于 2010-05-14 06:42:03
回答 8查看 28.1K关注 0票数 17

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

我用的是单例设计模式

代码语言:javascript
复制
 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类的对象?

我试过:

代码语言:javascript
复制
Singleton singleton = new Singleton(); 
// error - constructor is private
Singleton singleton = Singleton.getInstance();
// error - non-static method cannot be referenced from a static context

正确的代码是什么?

谢谢,斯宾塞

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-05-14 06:44:51

代码语言:javascript
复制
Singleton singleton = Singleton.getInstance();

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

由于您的Singleton实现远非安全??您的对象可以通过反射进行实例化,因此您可能希望基于enum创建一个单例。

票数 26
EN

Stack Overflow用户

发布于 2010-05-14 06:46:21

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

你给我们的课程代码是正确的。

最后,一个概念上的注意事项:首先,您不是“创建Singleton类的对象”--这是Singleton的全部要点。)您只是获得了对现有对象的引用。

票数 3
EN

Stack Overflow用户

发布于 2010-05-14 06:46:00

这个:

代码语言:javascript
复制
 Singleton singleton = Singleton.getInstance();

应该行得通。这就是在Java中调用静态方法的方式。getInstance()方法声明为static。您确定您使用的是同一个Singleton类吗?或者您已经在其他包中导入了一个名为“相同”的类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2832297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档