Je connais très bien le C # mais je commence à travailler davantage en Java. Je m'attendais à apprendre que les énumérations en Java étaient fondamentalement équivalentes à celles en C # mais apparemment ce n'est pas le cas. Au départ, j'étais ravi d'apprendre que les énumérations Java pouvaient contenir plusieurs éléments de données, ce qui semble très avantageux ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Cependant, depuis lors, j'ai trouvé de nombreuses fonctionnalités manquantes qui sont triviales en C #, telles que la possibilité d'attribuer facilement à un élément enum une certaine valeur, et par conséquent la possibilité de convertir un entier en enum sans un effort décent ( c'est-à-dire Convertir une valeur entière en Java Enum correspondant ).
Ma question est donc la suivante: y a-t-il un avantage aux énumérations Java par rapport à une classe avec un tas de champs finaux statiques publics? Ou fournit-il simplement une syntaxe plus compacte?
EDIT: Permettez-moi d'être plus clair. Quel est l'avantage des énumérations Java sur une classe avec un tas de champs finaux statiques publics du même type ? Par exemple, dans l'exemple des planètes au premier lien, quel est l'avantage d'une énumération sur une classe avec ces constantes publiques:
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);
Pour autant que je sache, la réponse de casablanca est la seule qui satisfait à cela.
S
, donc maintenant nous parlons de les transmettre probablement à des fonctions, etc. Avons-nous besoin de la sécurité de type? Eh bien, non, mais la plupart des gens considèrent les types de style C de "tout est un void*
" bon style et cela peut arrêter les bogues (surtout si vous passez plus d'un paramètre enum / string!). De plus, il place les constantes dans leur propre espace de noms, etc. Contrairement à cela, il n'y a pas de réel avantage à avoir des variables simples.
int
s, il n'y a pas de sécurité de type car on pourrait passer n'importe quelle valeur. Les objets typés, en revanche, ne sont pas différents des énumérations en termes de sécurité de type.
public static final
champs, qui peuvent être des valeurs typées et pas nécessairement desint
s.