枚举和单身 - 顶级VS嵌套枚举(enum and singletons - top level v

2019-09-24 02:38发布

正如现在众所周知的推荐方式为通过枚举使用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();

Answer 1:

你要嵌套一个Singleton当你想要执行延迟加载它,说测试的原因:

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

    static enum SingletonHolder {
        INSTANCE;
    }
}

了解更多关于在这里: http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom



Answer 2:

public enum Foo {
   INSTANCE;
}

是让一个单身后的Java 5.您发布的代码只是过于复杂的最简单和最好的方式,我没有看到只使用一个枚举过它的任何优势。



文章来源: enum and singletons - top level vs nested enum