Как Блох состояния, в пункте 3 («Принудительно одноплодной собственности с частным конструктору или перечислимого типа») в Эффективное Java 2-е издание, тип перечисления Одноэлементная является лучшим способом реализовать синглтон. К сожалению, старый шаблон частного конструктора по-прежнему очень распространен и укоренен до такой степени, что многие разработчики не понимают, что я делаю, когда создаю перечислительные числа.аннотаций для Java перечислений одноточечного
Простой // Enum Singleton
комментарий выше объявления класса помогает, но он по-прежнему оставляет возможность, что другой программист может прийти позже и добавить вторую константу в перечисление, нарушив свойство singleton. Для всех проблем, которые имеет подход частного конструктора, по-моему, он несколько более самодокументирован, чем одноэлементное перечисление.
Я думаю, что мне нужна аннотация, в которой говорится, что тип перечисления является одноэлементным и обеспечивает во время компиляции, что только одна константа когда-либо добавляется в перечисление. Что-то вроде этого:
@EnumSingleton // Annotation complains if > 1 enum element on EnumSingleton
public enum EnumSingleton {
INSTANCE;
}
Кто-нибудь сталкивается с такой аннотацией для стандартной Java в публичных библиотеках где угодно? Или это то, что я прошу о невозможности в текущей системе аннотации Java?
UPDATE
Обойти я использую, по крайней мере, пока я не решу, на самом деле беспокоиться прокаткой своих собственных аннотаций, это поставить @SuppressWarnings("UnusedDeclaration")
непосредственно перед INSTANCE
поля. Он делает достойную работу, чтобы сделать код отличным от простого типа перечисления.
Лучший способ должен быть в первую очередь прост и понятен с моей точки зрения. – kapand