现在众所周知,在java中创建单例的推荐方法是通过枚举(参见例如here)
但是(例如在这个answer中)似乎(在评论中回答我的@MikeAdler)正确考虑了 中的枚举 单例类(有关完整示例,请参阅例如here,或下面给出的代码)。我似乎并不真正了解这需要/使用 - 有人可以详细说明(并且最好为这个成语提供正确的方言)吗?
public class Enclosing {
private Enclosing() {}
static enum Singleton {
INSTANCE;
private static final Enclosing singleton = new Enclosing();
public Enclosing getSingleton() {
return singleton;
}
}
}
编辑:一个人可以通过Enclosing.Singleton.INSTANCE.getSingleton();
答案 0 :(得分:2)
当您想要执行lazy-loading时,您会嵌套一个Singleton,例如出于测试原因:
public class Singleton {
public Enclosing getInstance() {
return SingletonHolder.INSTANCE;
}
static enum SingletonHolder {
INSTANCE;
}
}
在此处详细了解:http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom
答案 1 :(得分:1)
public enum Foo {
INSTANCE;
}
是获得单例后java-5的最简单和最好的方法。你发布的代码只是不必要的复杂,我没有看到它只使用枚举的任何优势。