15 Stimmen

Enums VS-Klassen VS-Schnittstellen

Ich habe auf dieser Website viele Beiträge über die Verwendung von Konstanten gelesen.

Frage: Wann sollte ich Enums für Konstanten verwenden, im Gegensatz zu Klassen oder Schnittstellen.

Ich sehe 2 Schlüsselsituationen, die ich angehen möchte.

1. Globale Konstanten, die in einer Anwendung von mehreren Projekten verwendet werden.

Ejemplo:

  • Gemeinsame Protokollierungszeichenfolgen
  • Container-Referenzen wie eine Datenbank-Mapping-Referenz, die in WebSphere EAR's

2. Objektspezifische Konstanten

Ejemplo:

  • Mitarbeitertarife für ein Mitarbeiterobjekt

Nach allem, was ich gelesen habe, denke ich, dass ich es verstanden habe, und ich suche nach einer Meinung dazu.

Für Situation 1: Design-Ansatz: Verwenden Sie eine endgültige Klasse und einen statischen Import.
Hier zu sehen: Wozu dienen die Schnittstellenkonstanten?

Für Situation 2: Design-Ansatz: Verwendung von Enums zur Darstellung dieser Konstanten als Objekt.

Weitere Punkte, die zu beachten sind:

  • Wenn die konstante Zeichenkette zur Klasse gehört und Sie den Wert der Zeichenkette nur in der Klasse benötigen, die sie verwendet
  • Verwenden Sie keine Schnittstelle für Situation 1. Wie in dem obigen Link als Constant Interface Anti-pattern erwähnt. .

Vielen Dank im Voraus für Ihre Gedanken und Meinungen.

12voto

Woot4Moo Punkte 23471

Globale Konstanten, wie Sie es formulieren, sollten eigentlich in einer Eigenschaftsdatei stehen, da sie so von jeder Anwendung individuell konfiguriert werden können, ohne dass der Code geändert werden muss. Für objektspezifische Konstanten gilt meine allgemeine Faustregel Enum gegen static final Ich orientiere mich in der Regel daran, wie viele Elemente es gibt und wie diese Elemente miteinander verbunden sind. Wenn es eine große Beziehung zwischen ihnen gibt, wie z. B. Suits in einem Stapel von Cards dann würde ich mich für die Aufzählung entscheiden. Wenn es sich um das Standardalter eines Benutzers handelt, ist dies eine endgültige Entscheidung, da es keinen Zweck hat, es zu einer Enum zu machen, da es nicht in vielen Bereichen referenziert werden muss. Dies sind nur einige Gedanken zu den verschiedenen Möglichkeiten, die ich mir überlegt habe.

3voto

zengr Punkte 37400
  1. Globale Konstanten, die von verschiedenen Projekten verwendet werden : Enum
    Besser zu verwenden Enum über public static final Mitglieder in einer Klasse. Ich denke, das ist übersichtlicher und leichter zu verstehen.

  2. Objektspezifische Konstanten : public static final members in Class . Da sie nur im Rahmen des Objekts benötigt werden, ist es nicht notwendig, eine neue Enum dafür zu erstellen.

Schön lesen

Update (fehlerhafter Link korrigiert):

  1. Das Beste aus Java 5.0 herausholen: Enum-Tricks
  2. Das Beste aus Java 5.0 machen: Enum Beispiel

0voto

nsfyn55 Punkte 14087

Es klingt, als ob fast alles, was Sie für die Nummern 1 und 2 aufgeführt haben, in Konfigurationsdateien oder Datenbanktabellen gehört.

Möchten Sie den Code neu kompilieren, wenn Ihre Mitarbeiter eine Gehaltserhöhung erhalten oder sich der Name einer Seite ändert?

Sofern es keinen zwingenden Grund gibt, sollte alles andere, was konstant ist, als Enum modelliert werden. Auf diese Weise können Sie die Vorteile schneller Objektgleichheitsvergleiche nutzen und Probleme im Zusammenhang mit String-Konstanten vermeiden.

Der Umfang dieser Enums ist jedoch anwendungsspezifisch. Wenn die Aufzählung nur von einer Klasse verwendet wird, sollte sie eine private Aufzählung sein. Wenn sie von mehreren Klassen gemeinsam genutzt wird, sollte sie in einer eigenen Klassendefinitionsdatei enthalten sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X