Estoy muy familiarizado con C # pero estoy empezando a trabajar más en Java. Esperaba aprender que las enumeraciones en Java eran básicamente equivalentes a las de C #, pero aparentemente este no es el caso. Inicialmente, me entusiasmó saber que las enumeraciones de Java podrían contener múltiples datos que parecen muy ventajosos ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Sin embargo, desde entonces he descubierto que faltan muchas características que son triviales en C #, como la capacidad de asignar fácilmente un determinado elemento a un cierto valor y, en consecuencia, la capacidad de convertir un número entero en una enumeración sin una cantidad decente de esfuerzo ( es decir, convertir el valor entero en Java Enum correspondiente ).
Entonces mi pregunta es esta: ¿hay algún beneficio para las enumeraciones de Java sobre una clase con un montón de campos finales estáticos públicos? ¿O simplemente proporciona una sintaxis más compacta?
EDITAR: Déjame ser más claro. ¿Cuál es el beneficio de las enumeraciones Java sobre una clase con un montón de campos finales estáticos públicos del mismo tipo ? Por ejemplo, en el ejemplo de los planetas en el primer enlace, ¿cuál es la ventaja de una enumeración sobre una clase con estas constantes públicas:
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);
Por lo que puedo decir, la respuesta de casablanca es la única que satisface esto.
S
, por lo que ahora estamos hablando de pasarlos probablemente a funciones, etc. ¿ Necesitamos seguridad de tipografía? Bueno, no, pero la mayoría de las personas consideran los tipos de estilo c de "todo es un void*
" buen estilo y puede detener los errores (¡especialmente si pasa más de un parámetro enum / string!). También pone las constantes en su propio espacio de nombres, etc. Contrariamente a eso, no hay una ventaja real de tener variables simples.
int
s, no hay seguridad de tipo porque uno podría pasar cualquier valor. Los objetos mecanografiados, por otro lado, no son diferentes de las enumeraciones en términos de seguridad de tipos.
public static final
campos, que pueden ser valores escritos y no necesariamenteint
s.