In verschiedenen Zusammenhängen habe ich beobachtet, dass Leute enums verwenden - für Dinge, für die sie nach meinem Dafürhalten absolut nicht geeignet oder gedacht sind.
Die Auswüchse, die das teilweise annimmt, und die Planlosigkeit, mit der “einfach mal eine enum in den Code geworfen” wird, ist schon fast verstörend. Ein (vom Original zu Anonymized
umbenanntes) Beispiel:
public enum AnonymizedEnum {
ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN
}
Dass komplexe, sich ständig ändernde, hierarchische Strukturen mit hierarchisch verschachtelten enum-Instanzen abgebildet werden, war ein weiteres Highlight. Den Code kann ich aus “NDA-Gründen” nicht posten.
Ein Anlass für diesen Thread ist, dass kürzlich auf stackoverflow jemand gefragt hat: Is there a way to have a bigger enum than 2746 values?.
Wie dort in meinem Kommentar auch erwähnt: Selbst im offiziellen enum-Tutorial-Beispiel wird etwas gemacht, was meiner Ansicht nach “falsch” ist: Dort wird folgende enum
definiert:
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
}
Und aus Neugier, und um meinen Punkt zu unterstreichen, bin ich mal auf Spurensuche gegangen, und habe in der Wayback-Machine eine ältere Version des Tutorials ausgegraben. Dort war die enum noch definiert als
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7),
PLUTO (1.27e+22, 1.137e6);
}
Nun. Das ist schon eine source- und binär-inkompatible Änderung.
Findet ihr (auch), dass enums nur verwendet werden sollten, wenn das “Domänenmodell” die Menge der Konstanten für alle Zeit unveränderlich festlegt? (Damit meine ich sowas wie DayOfWeek
oder TrafficLightColor
: Wenn etwas nicht aus Sonntag…Freitag besteht, dann ist das einfach keine Woche. Und wenn etwas nicht aus RED
, YELLOW
, GREEN
besteht, dann ist das einfach keine Ampel. Sooo viele Beispiele gibt es da IMHO nicht…