BlochがEffectiveJava2nd Editionの項目3(「プライベートコンストラクターまたは列挙型でシングルトンプロパティを適用する」)で述べているように、単一要素の列挙型はシングルトンを実装するための最良の方法です。残念ながら、古いプライベートコンストラクターパターンはまだ非常に広範で定着しており、列挙型シングルトンを作成するときに多くの開発者が私が何をしているのか理解できないほどです。
クラス宣言の上の簡単な// Enum Singleton
コメントは役に立ちますが、それでも、別のプログラマーが後でやって来て、列挙型に2番目の定数を追加し、シングルトンプロパティを壊す可能性があります。プライベートコンストラクターアプローチが抱えるすべての問題について、私の意見では、列挙型シングルトンよりもいくらか自己文書化されています。
私が必要としているのは、列挙型がシングルトンであることを示し、コンパイル時に1つの定数のみが列挙に追加されることを保証するアノテーションです。このようなもの:
@EnumSingleton // Annotation complains if > 1 enum element on EnumSingleton
public enum EnumSingleton {
INSTANCE;
}
誰かがどこかの公共図書館で標準Javaのそのような注釈に出くわしたことがありますか?それとも、Javaの現在の注釈システムでは不可能だと私が求めていることはありますか?
アップデート
私が使用している回避策の1つは、少なくとも自分の注釈を実際にローリングすることに悩むまでは、フィールド@SuppressWarnings("UnusedDeclaration")
の真正面に配置することです。INSTANCE
これは、コードを単純な列挙型とは異なるように見せるための適切な役割を果たします。