Come Bloch afferma al punto 3 ("far rispettare la proprietà Singleton con un costruttore privato o di un tipo enum") del Effective Java 2nd Edition, un tipo enum singolo elemento è il modo migliore per implementare un singleton. Sfortunatamente il vecchio modello di costruttore privato è ancora molto diffuso e radicato, al punto che molti sviluppatori non capiscono cosa sto facendo quando creo enum singletons.annotazioni per Java enum Singleton
Un semplice // Enum Singleton
commento di cui sopra la dichiarazione della classe aiuta, ma lascia ancora aperta la possibilità che un altro programmatore potrebbe venire dopo e aggiungere una seconda costante al enum, rompendo la proprietà Singleton. Per tutti i problemi che l'approccio del costruttore privato ha, a mio avviso, è un po 'più autodocumentante di un enum singleton.
Penso che ciò di cui ho bisogno è un'annotazione che afferma sia che il tipo di enum è un singleton e assicura in fase di compilazione che all'enumerazione viene aggiunta una sola costante. Qualcosa del genere:
@EnumSingleton // Annotation complains if > 1 enum element on EnumSingleton
public enum EnumSingleton {
INSTANCE;
}
Qualcuno ha eseguito un'annotazione di questo tipo per Java standard nelle librerie pubbliche? O è ciò che sto chiedendo impossibile sotto l'attuale sistema di annotazione di Java?
UPDATE
Una soluzione che sto utilizzando, almeno fino a quando decido di preoccuparsi in realtà con dolci le mie annotazioni, è quello di mettere @SuppressWarnings("UnusedDeclaration")
direttamente di fronte al campo INSTANCE
. Fa un lavoro decente di rendere il codice un aspetto distinto da un tipo enum semplice.
Il modo migliore deve essere in primo luogo semplice e chiaro dal mio punto di vista. – kapand