In meiner Erfahrung habe ich gesehen, dass die Verwendung von Enums manchmal dazu führen kann, dass Systeme sehr schwer zu ändern sind. Wenn Sie ein Enum für eine Gruppe von domänenspezifischen Werten verwenden, die sich häufig ändern, und es viele andere Klassen und Komponenten gibt, die davon abhängen, sollten Sie in Betracht ziehen, kein Enum zu verwenden.
Zum Beispiel ein Handelssystem, das ein Enum für Märkte/Börsen verwendet. Es gibt viele Märkte da draußen und es ist fast sicher, dass es viele Teilsysteme geben wird, die auf diese Liste von Märkten zugreifen müssen. Jedes Mal, wenn Sie einen neuen Markt zu Ihrem System hinzufügen möchten, oder wenn Sie einen Markt entfernen möchten, ist es möglich, dass alles von Grund auf neu erstellt und veröffentlicht werden muss.
Ein besseres Beispiel wäre etwas wie ein Produktkategorietyp. Angenommen, Ihre Software verwaltet das Inventar für ein Kaufhaus. Es gibt viele Produktkategorien, und viele Gründe, warum sich diese Liste von Kategorien ändern könnte. Manager möchten vielleicht eine neue Produktlinie stocken, andere Produktlinien loswerden und möglicherweise die Kategorien von Zeit zu Zeit neu organisieren. Wenn Sie alle Ihre Systeme neu erstellen und bereitstellen müssen, einfach weil Benutzer eine Produktkategorie hinzufügen möchten, dann haben Sie etwas, das einfach und schnell sein sollte (das Hinzufügen einer Kategorie) sehr schwierig und langsam gemacht.
Im Endeffekt sind Enums gut, wenn die Daten, die Sie repräsentieren, im Laufe der Zeit sehr statisch sind und eine begrenzte Anzahl von Abhängigkeiten haben. Aber wenn die Daten sich häufig ändern und viele Abhängigkeiten bestehen, dann benötigen Sie etwas Dynamisches, das nicht zur Kompilierzeit überprüft wird (wie eine Datenbanktabelle).
10 Stimmen
Im seinem Buch Effective Java, Second Edition erläutert Joshua Bloch diesen Ansatz in Item 3: Enforce the Singleton Property with a Private Constructor or an enum Type, nachgedruckt in Dr. Dobb's.
1 Stimmen
Sie können Enums nicht instanziieren, da diese einen privaten Konstruktor haben. Sie werden beim Starten der JVM instanziiert, also handelt es sich um Singletons. Enums sind nicht thread-sicher.
0 Stimmen
Ich stimme dafür, diese Frage zu schließen, weil dieses Meta das besagt: meta.stackoverflow.com/questions/429367/closing-consistency