まくまくJavaノート
private のコンストラクタか enum 型でシングルトン特性を強制する
2016-02-09

Java 1.5 (Tiger) からは、ひとつの要素だけを持つ enum 型を提供することでシングルトンを作成することができます。

public enum MySingleton {
    INSTANCE;

    public void greet() { ... }
}

private static なフィールドを利用してシングルトンクラスを作成する方法と比べ、下記のような利点があります。

  • シリアライズの機能を備える(implementes Serializable しなくてよい)
  • シリアライズ攻撃に耐性を持つ(readResolve メソッドを実装しなくてよい)
  • リフレクション攻撃に耐性を持つ
2016-02-09