3

現在よく知られているように、Java でシングルトンを作成するための推奨される方法は、列挙型を使用することです (たとえば、こちらを参照してください) 。

しかし(たとえば、この回答では)(コメントで私に返信した@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();

4

2 に答える 2

2

シングルトンの遅延読み込みを実行する場合は、テスト上の理由から、シングルトンをネストします。

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 に答える