Wie Bloch in Punkt 3 ("Erzwingen der Singleton-Eigenschaft mit einem privaten Konstruktor oder einem Enum-Typ") von Effektive Java 2nd Edition feststellt, ist ein Enumerationstyp mit einem einzelnen Element der beste Möglichkeit, ein Singleton zu implementieren . Leider ist das alte private Konstruktormuster immer noch sehr weit verbreitet und fest verwurzelt, bis zu dem Punkt, dass viele Entwickler nicht verstehen, was ich mache, wenn ich Enum-Singletons erstelle.
Ein einfacher // Enum Singleton
-Kommentar oberhalb der Klassendeklaration hilft, aber es lässt immer noch die Möglichkeit offen, dass ein anderer Programmierer später kommen und eine zweite Konstante zur Enumeration hinzufügen könnte, wodurch die Singleton-Eigenschaft gebrochen wird. Bei all den Problemen, die der Ansatz des privaten Konstrukteurs hat, ist er meiner Meinung nach etwas selbstdokumentierender als ein enum singleton.
Ich denke, was ich brauche, ist eine Annotation, die besagt, dass der Enum-Typ ein Singleton ist und bei der Kompilierung sicherstellt, dass dem Enum immer nur eine Konstante hinzugefügt wird. Etwas wie das:
%Vor%Hat irgendjemand eine solche Annotation für Standard-Java in öffentlichen Bibliotheken irgendwo durchgelesen? Oder ist das, was ich unter Javas aktuellem Annotationssystem für unmöglich halte?
AKTUALISIEREN
Eine Problemumgehung, die ich verwende, zumindest bis ich mich entscheide, meine eigenen Anmerkungen zu rollen, ist @SuppressWarnings("UnusedDeclaration")
direkt vor das Feld INSTANCE
zu setzen. Es macht einen anständigen Job, den Code von einem einfachen Enum-Typ verschieden aussehen zu lassen.
Ich bin mir einer solchen Annotation in öffentlichen Java-Bibliotheken nicht bewusst, aber Sie können sich eine solche Kompilierungszeit-Annotation für Ihre Projekte definieren. Natürlich müssen Sie einen Annotationsprozessor dafür schreiben und irgendwie APT (mit Ameise oder Maven ) Überprüfen Sie Ihre @EnumSingleton
announced enums zum Zeitpunkt der Kompilierung für die beabsichtigte Struktur.
Hier finden Sie eine Ressource zum Schreiben und Verwenden von Kompilierungszeitanmerkungen .
Tags und Links java singleton enums annotations