Superdry Memorandom :-p

旧「superdry memorandum :-D」です

Effective Java 項目3 シングルトンを実装するにはenum型使うのがいいよ

シングルトンの書き方

その1 public final フィールドで
public class Hoge{
    public static final Hoge INSTANCE = new Hoge();
    private Hoge {…}
        …
}
  • シングルトンであることが明白
  • シリアライズ可能にする場合は実装が煩雑(すべてのインスタンスフィールドでtransient宣言しないと不完全なシングルトンとなる)
その2 staticファクトリーメソッドで
public class Hoge{
    praivate static final Hoge INSTANCE = new Hoge();
    private Hoge {…}
    public static Hoge getInstance() {
        return INSTANCE;
    }
        …
}
  • 性能上の問題は昔あったけど、今はJVMが進化してインライン化されるんで問題ない
  • 強いて言えば、シングルトンであるかどうか動的に決定できるぐらい(でもあまりそんなことしない)
  • シリアライズ可能にする場合は実装が煩雑(その1と同じ理由)
その3 enum型で(推奨)
public enum Hoge{
    INSTANCE;
        …
}

Androidの場合の注意点

Androidだとenum型は

  • 古いSDKだとパフォーマンスに影響があった(→StackOverflow
  • ProGuardかけるときも対象外

状況に応じて使い分けるべき。