JavaでシングルトンとしてEnumを使用するための最良のアプローチは何ですか?

StackOverflow https://stackoverflow.com/questions/427902

  •  06-07-2019
  •  | 
  •  

質問

SOの質問 Javaでのベストシングルトン実装で書かれたものの上に構築する-すなわち、シングルトンを作成するために列挙型を使用することについて-違い/長所/短所(コンストラクター省略)

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}

そして Elvis.INSTANCE.getAge()

を呼び出す

and

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}

そして Elvis.getAge()

を呼び出す
役に立ちましたか?

解決

与えられたオブジェクトのプロパティを使用するものにバインドしていると仮定します-Elvis.INSTANCEを非常に簡単に渡すことができますが、Elvis.classを渡してプロパティを見つけることを期待することはできません(意図的にそうでない場合)クラスの静的プロパティを見つけるためにコーディングされています)。

基本的に、インスタンスを したい場合にのみシングルトンパターンを使用します。静的メソッドが適切に機能する場合は、それらを使用するだけで、enumを気にしないでください。

他のヒント

大きな利点は、シングルトンがインターフェイスを実装する必要がある場合です。あなたの例に従ってください:

public enum Elvis implements HasAge {
    INSTANCE;
    private int age;

    @Override
    public int getAge() {
        return age;
    }
}

with:

public interface HasAge {
    public int getAge();
}

静的変数では実行できません...

(ステートフル)通常、シングルトンは静的変数を使用しないふりをするために使用されます。実際にパブリックに静的変数を使用しない場合、だまされる人が少なくなります。

最も単純で明確なオプションを選択します。これは多少主観的ですが、最も明確なものがわからない場合は、最短のオプションを選択してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top