Conosco molto bene C # ma sto iniziando a lavorare di più in Java. Mi aspettavo di apprendere che gli enum in Java erano sostanzialmente equivalenti a quelli in C # ma a quanto pare non è così. Inizialmente ero entusiasta di apprendere che gli enum Java potevano contenere più dati che sembrano molto vantaggiosi ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Tuttavia, da allora ho scoperto che mancano molte funzionalità che sono insignificanti in C #, come la capacità di assegnare facilmente un elemento enum un certo valore e, di conseguenza, la capacità di convertire un numero intero in un enum senza un discreto sforzo ( cioè Converti il valore intero in Java Enum corrispondente ).
Quindi la mia domanda è questa: c'è qualche vantaggio in enum Java rispetto a una classe con un sacco di campi finali statici pubblici? O fornisce semplicemente una sintassi più compatta?
EDIT: Vorrei essere più chiaro. Qual è il vantaggio di Java enum su una classe con un gruppo di campi finali statici pubblici dello stesso tipo ? Ad esempio, nell'esempio dei pianeti al primo collegamento, qual è il vantaggio di un enum rispetto a una classe con queste costanti pubbliche:
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);
Per quanto ne so, la risposta di Casablanca è l'unica che soddisfa questo.
S, quindi ora stiamo parlando probabilmente di passarli a funzioni, ecc. Abbiamo bisogno di sicurezza dei tipi? Bene, no, ma la maggior parte delle persone considera i tipi in stile c di "tutto è un void*" buon stile e può bloccare i bug (specialmente se si passa più di un parametro enum / string!). Inoltre mette le costanti nel loro spazio dei nomi, ecc. Contrariamente a ciò, non c'è alcun vantaggio reale avere solo variabili semplici.
ints, non esiste una sicurezza di tipo perché si potrebbe passare qualsiasi valore. Gli oggetti digitati, d'altra parte, non sono diversi dagli enumerati in termini di sicurezza del tipo.
public static finalcampi, che possono essere valori digitati e non necessariamenteints.