Java 1.5 (Tiger) からは、ひとつの要素だけを持つ enum 型を提供することでシングルトンを作成することができます。
public enum MySingleton {
INSTANCE;
public void greet() { ... }
}
private static なフィールドを利用してシングルトンクラスを作成する方法と比べ、下記のような利点があります。
- シリアライズの機能を備える(
implements Serializableしなくてよい) - シリアライズ攻撃に耐性を持つ(
readResolveメソッドを実装しなくてよい) - リフレクション攻撃に耐性を持つ