Effective Javaに、EnumでSingletonを実現する方法が載ってました。(1st editionにはおそらく載っていないと思います。)
やり方が面白かったので載せます。
Singletonクラス
public enum Singleton {
SINGLETON;
public void doSomething() {
// omitted
}
}
使い方
Singleton singleton = Singleton.SINGLETON;
singleton.doSomething();
感想
変数をstatic finalにしたり、コンストラクタをprivateにしたり、getInstance()メソッドを用意したり…ということをせずに、非常に簡単にコードを書くことができます。
簡単な上に、これまでのSingletonパターンにありがちだったinstance化の競合やserializeの問題をEnum化で克服できるという点も見逃せないです。
ただ、S2全盛でS2ContainerにSingleton管理を任せてしまっている現状では、どれだけ使う機会があるのか?
…機会があったら、是非この方法を採用してみたいです。