枚举和单身 – 顶级vs嵌套枚举

现在众所周知,在java中创建单例的推荐方法是通过枚举(参见例如此处 )

但是(例如在这个答案中 )似乎(在评论中回复我的@MikeAdler)考虑单例类中使用枚举的正确方法(例如,请参阅此处的完整示例,或给出的代码)下面)。 我似乎并不真正理解这个的需要/使用 – 有人可以详细说明(并且最好为这个成语提供正确的方言)吗?

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();获得单身人士Enclosing.Singleton.INSTANCE.getSingleton();

当你想对它进行延迟加载时,你会嵌套一个Singleton,比如测试原因:

 public class Singleton { public Enclosing getInstance() { return SingletonHolder.INSTANCE; } static enum SingletonHolder { INSTANCE; } } 

在这里阅读更多相关信息: http : //en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom

 public enum Foo { INSTANCE; } 

获得单例后java-5的最简单和最好的方法。你发布的代码只是不必要的复杂,我没有看到它只使用枚举的任何优势。