【发布时间】:2011-08-23 19:22:48
【问题描述】:
实现单例模式的默认方式是:
class MyClass {
private static MyClass instance;
public static MyClass getInstance() {
if (instance == null) {
instance = new MyClass();
}
return instance;
}
}
在一个旧项目中,我试图简化写作:
class MyClass {
private static final MyClass instance = new MyClass();
public static MyClass getInstance() {
return instance;
}
}
但它有时会失败。我只是不知道为什么,我做了默认的方式。 今天做一个SSCCE发到这里,我已经意识到代码可以工作了。
所以,我想知道意见.. 这是一个偶然的失败代码吗? 第二种方法是否有可能返回null? 我要疯了吗?
-- 虽然我不知道是否是每个案例的正确答案,但@Alfred 的答案非常有趣: 我还想指出,单身人士正在测试噩梦,根据大佬的说法,你应该使用谷歌的依赖注入框架。
【问题讨论】:
-
“我疯了吗?” - 不。但如果你是,我拥有 ACME Purple Elephant Repellant (tm) 的全球分销权。 :-)
-
这是我见过的最好的单例实现(在方括号之间):[ ]。
-
以什么方式失败了?你看到的错误是什么?出了什么问题?
-
你把例子倒过来了吗?第一个示例很可能返回 null - 它不是线程安全的。我真的不明白第二个如何返回 null
标签: java design-patterns singleton