2012-07-09 20 views
10

Después de leer algunas preguntas y respuestas sobre enum no me parece realmente útil ...¿Para qué sirve Enum?

Es algo entre clase y una variable, pero sé dónde puedo usarlo, por lo que sería más útil que una clase, o un par de variables, por ejemplo.

+6

http://stackoverflow.com/questions/481068/when-to-use-enum-or-collection-in-java – Habib

+1

http://stackoverflow.com/questions/2077634/enum-in-java-advantages – assylias

Respuesta

32

Hay otras cosas que puede hacer y razones para usarlas, pero el motivo principal por el que utilizo enumeraciones es para evitar la posibilidad de un parámetro no válido. Por ejemplo, imaginemos el siguiente método:

public void doSomethingWithAMonth(int monthNum); 

Esto no sólo es ambigua (? Hacer índices mensuales comienzan en 1 o en 0), pero se puede dar datos no válidos abajo a la derecha (13+, números negativos) . Si usted tiene una enumeración Month con enero, febrero, etc. la firma se convierte en:

public void doSomethignWithAMonth(Month month); 

Código llamar a este método será mucho más fácil de leer, y no puede proporcionar datos no válidos.

+1

¡Gracias! Ahora creo que lo entiendo un poco mejor :) –

+1

Ese es un ejemplo simple y bueno – njfife

2

Como sale del nombre "enum", es ideal para constantes de enumeración, que proporcionan funcionalidad extendida. Como por ejemplo, puede almacenar algunas constantes que comprenden varios parámetros como: constantId, constanNameString, params adicionales. Además, enum puede contener funciones.

Un uso exótico de enum es hacer un singleton.

4

Un enum obliga a los codificadores a seleccionar de una lista predefinida de entidades o conceptos. Si bien puede lograr el mismo objetivo con las clases o establecer una variable para un valor conocido particular, una enumeración es menos propensa a errores, ya que anuncia e impone un menú desde el cual el colocador de un valor puede elegir.

4

Un Enum es útil para evitar que las personas hagan cosas que no deberían hacer. Por ejemplo, si tengo:

public final static int WEATHER_SUNNY = 0; 
public final static int WEATHER_RAINY = 1; 
public final static int WEATHER_HAIL = 2; 

entonces puedo hacer: MyClass.WEATHER_SUNNY + MyClass.WEATHER_HAIL que no tiene sentido. Es por eso que es mejor tener un enum de clima. Esto hace que el código sea más legible y no permite sumar dos enteros del clima.

+0

No soy un gran admirador de este ejemplo si solo por el hecho de que siento que fomenta el pensamiento estrecho de miras. No hay razón para que diferentes tipos de clima como este no se superpongan, de hecho, lo hacen con frecuencia. – Thor84no

+0

@ Thor84no: gracias por tu comentario. Sin embargo, todo esto depende del dominio y la aplicación, por lo que decir cosas como "fomenta el pensamiento de mente estrecha". no parece apropiado –

10

Utilizo Enums para cualquier cosa que tenga un "tipo" no cambiante de algo. es decir, días de una semana.

Por qué no uso String en este caso es porque no puedo hacer la declaración de cambio en el String y puedo hacerlo en Enum, así que para cada día de la semana puedo hacer algo específico.

También uso Enum cuando se trabaja con el patrón Singleton, Compruebe la Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS), cita:

"Si bien este enfoque aún tiene que ser ampliamente adoptada, un tipo de enumeración de un solo elemento es la mejor manera de poner en práctica un conjunto unitario " No voy a pegar el código, leí el libro, es excelente.

Si fuera usted, primero leería Thinking in java capítulo Tipos enumerados. Luego, después de ese capítulo efectivo de Java 6 y usted debe ser bueno

2

Enum es útil cuando tiene una lista de valores que son funcionalmente significativos y finitos.

Digamos, por ejemplo, que debe usar un día de la semana: no se agregará otro día y preferirá tener el día.LUNES en su código en lugar de un número y tener que recordar que 0 es lunes, 1 es martes y así sucesivamente. Hace sentencia switch más fácil de entender también, con:

Switch(day) { 
    case Monday : ... break; 
    case Tuesday : ... break 
    etc. 
} 
3

me gustaría añadir a las otras respuestas que las enumeraciones son clases que solo tienen un número fijo de instancias. Estas instancias pueden tener campos y métodos, y usarse como cualquier otro objeto de Java. Por ejemplo, el Month enumeración podría definir métodos como

public int getNumberOfDays(int year); 
public boolean isFirstOfYear(); 
7

más simple definición - An enum is just like any other class, with a predefined set of instances.

mejor parte de enumeración es que puede ser utilizado en los estados de conmutación en el que no se pueden utilizar cadenas.

y Enum es un tipo seguro por lo que no puede asignar un nuevo valor en el tiempo de ejecución.

+1

Solo para cualquiera que se encuentre con esto, a partir de Java 7, ya no es cierto que no puede usar 'String's en sentencias' switch'. http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html – Thor84no