with values valueof tutorial enum java enums

values - java enum valueof



Enum en Java. Ventajas? (10)

Además de mejorar la seguridad de los tipos, también puede definir un comportamiento personalizado en sus enumeraciones (consulte Efectiva Java para ver algunos buenos ejemplos).

¿Cuáles son algunas ventajas de hacer enumeración en Java similar a una clase, en lugar de solo una colección de constantes como en C / C ++?


Beneficios de usar enumeraciones: un objeto se puede crear para que funcione de la misma manera que una enumeración. De hecho, las enumeraciones ni siquiera se incluyeron en el lenguaje Java hasta la versión 5.0. Sin embargo, las enumeraciones hacen que el código sea más legible y brindan menos espacio para el error del programador.

OCA Java SE 7 Programmer I Guía de estudio


Convertir a enum en un tipo de referencia que puede contener un conjunto fijo de constantes ha llevado a una implementación eficiente del Mapa como EnumMap y Establecer una implementación como EnumSet (clases JDK).

Desde javadoc de EnumMap:
Una implementación de mapas especializada para usar con claves de tipo enum. Todas las claves en un mapa de enumeración deben provenir de un solo tipo de enumeración que se especifique, explícita o implícitamente, cuando se crea el mapa. Los mapas de enumeración se representan internamente como matrices. Esta representación es extremadamente compacta y eficiente.

EnumMap combina la riqueza y la seguridad de tipos de Map con la velocidad de una matriz ( Java efectiva ).


La única ventaja real es que se puede utilizar en una declaración de switch . Todo lo demás que puede hacer una enumeración se puede hacer simplemente con la clase de vainilla simple con un constructor private cuyas instancias a su vez se declaran como campos public static final de la clase en cuestión (el patrón de seguridad de tipos). La otra ventaja de la enumeración es, obviamente, que hace que el código sea menos detallado de lo que lo haría con una clase de vainilla simple.

Pero si no me equivoco, en C ++ (¿o fue C #?) Puedes usar una String en una instrucción de switch . Entonces, la ventaja de las enumeraciones en Java es despreciable en comparación con C ++. Sin embargo, lo mismo se propuso para Java 7, no estoy seguro de si lo logrará.


Las enumeraciones son un tipo en sí mismo: no puede usar una enumeración que no exista, ni poner en otra constante de aspecto similar. y también, puede enumerarlos, para que el código pueda ser más conciso.

el uso de constantes estáticas podría causar pesadillas de mantenimiento, especialmente si se extienden por área.


Las enumeraciones ya son una clase en Java .

Si está preguntando por qué esto es mejor, diría que vendría a la mente una mejor seguridad de tipo y la capacidad de agregar otros atributos además del mero valor ordinal.


Los enums de Java 5 se originaron a partir de un patrón de enumeración segura de tipos de Effective Java (la primera edición) de Joshua Bloch para evitar las trampas de los enumerados en C / C ++ / C # (que son simplemente constantes int de velo fino) y el uso en Java de la versión final constantes estáticas int.

Principalmente las constantes int y los enums no son seguros para los tipos. Puedes pasar cualquier valor int. En C / C ++ puedes hacer esto:

enum A { one, two, three }; enum B { beef, chicken, pork } b = beef; void func(A a) { ... } func((A)b);

Desafortunadamente, el patrón de enumeración segura de tipos de Effective Java tenía un montón de repetitivo, no todo es obvio. Lo más notable es que tuvo que anular el método privado readResolve para detener la creación de nuevas instancias de Java en la deserialización, lo que interrumpiría la verificación de referencia simple (es decir, utilizar el operador == lugar de equals() ).

Así que los enums de Java 5 ofrecen estas ventajas sobre los ints:

  • Tipo de seguridad;
  • Los enums de Java 5 pueden tener comportamiento e implementar interfaces;
  • Los enums de Java 5 tienen algunas estructuras de datos extremadamente ligeras como EnumSet y EnumMap .

Java 5 enumera sobre estas ventajas con solo usar clases:

  • Menos repetitivo propenso a errores (constructor privado, readResolve() etc.);
  • La corrección semántica. Ves que algo es una enumeración y sabes que solo representa un valor. Ves una clase y no estás seguro. Tal vez haya un método de fábrica estático en algún lugar, etc. Las enumeraciones de Java 5 indican mucho más claramente la intención.

Puede utilizar enumeraciones para implementar de forma efectiva Singletons ^^:

public enum Elvis { INSTANCE }


Tipo de seguridad es una de las razones.

Otra, que me parece más importante , es que puede adjuntar metadatos a los valores de enumeración en Java. Por ejemplo, podría usar una enumeración para definir el conjunto de operaciones legales para un servicio web y luego adjuntar metadatos para el tipo de solicitud y clase de datos:

AddItem(HttpMethod.POST, ProductEntry.class),


Usted obtiene gratis el tiempo de compilación de verificación de los valores válidos. Utilizando

public static int OPTION_ONE = 0; public static int OPTION_TWO = 1;

no asegura

void selectOption(int option) { ... }

solo aceptará 0 o 1 como valor de parámetro. Usando una enumeración, eso está garantizado. Además, esto lleva a un código más auto documentado, porque puede usar la terminación de código para ver todos los valores de enumeración.