Ich bin sehr vertraut mit C #, fange aber an, mehr in Java zu arbeiten. Ich hatte erwartet zu erfahren, dass Enums in Java im Grunde denen in C # entsprechen, aber anscheinend ist dies nicht der Fall. Anfangs war ich begeistert zu erfahren, dass Java-Enums mehrere Daten enthalten können, was sehr vorteilhaft erscheint ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Seitdem fehlen jedoch viele Funktionen, die in C # trivial sind, z. B. die Möglichkeit, einem Aufzählungselement auf einfache Weise einen bestimmten Wert zuzuweisen, und folglich die Möglichkeit, eine Ganzzahl ohne großen Aufwand in eine Aufzählung umzuwandeln ( dh Konvertieren Sie einen ganzzahligen Wert in eine übereinstimmende Java-Aufzählung .
Meine Frage lautet also: Gibt es einen Vorteil für Java-Aufzählungen gegenüber einer Klasse mit einer Reihe öffentlicher statischer Endfelder? Oder bietet es nur eine kompaktere Syntax?
EDIT: Lassen Sie mich klarer sein. Was ist der Vorteil von Java-Aufzählungen gegenüber einer Klasse mit einer Reihe öffentlicher statischer Endfelder desselben Typs ? Was ist beispielsweise im Planetenbeispiel unter dem ersten Link der Vorteil einer Aufzählung gegenüber einer Klasse mit diesen öffentlichen Konstanten:
public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = new Planet(1.024e+26, 2.4746e7);
Soweit ich das beurteilen kann, ist die Antwort von casablanca die einzige, die dies befriedigt.
S
, so dass jetzt reden wir über sie wahrscheinlich in Funktionen vorbei, usw. Haben wir brauchen -saftey geben? Nun, nein, aber dann betrachten die meisten Leute C-Style-Typen von "Alles ist ein void*
" guter Stil und es kann Fehler stoppen (insbesondere wenn mehr als ein Enum / String-Parameter übergeben wird!). Außerdem werden die Konstanten in ihren eigenen Namespace usw. eingefügt. Im Gegensatz dazu gibt es keinen wirklichen Vorteil, nur einfache Variablen zu haben.
int
s gibt es keine Typensicherheit, da man jeden Wert übergeben kann. Typisierte Objekte unterscheiden sich dagegen in Bezug auf die Typensicherheit nicht von Aufzählungen.
public static final
Felder erwähnte , bei denen es sich möglicherweise um typisierte Werte handelt und nicht unbedingt umint
s.