3

众所周知,在 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();

4

2 回答 2

2

当您想对其执行延迟加载时,您会嵌套一个 Singleton ,例如出于测试原因:

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

    static enum SingletonHolder {
        INSTANCE;
    }
}

在此处阅读更多信息:http ://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom

于 2012-10-14T14:33:06.613 回答
1
public enum Foo {
   INSTANCE;
}

是获得单例后 java 5 的最简单和最好的方法。您发布的代码只是不必要地复杂,我认为它与仅使用枚举相比没有任何优势。

于 2012-10-14T14:25:55.327 回答