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.
ints 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 finalFelder erwähnte , bei denen es sich möglicherweise um typisierte Werte handelt und nicht unbedingt umints.