El tipo de enumeración es una nueva característica en el lenguaje Java 1.5.0 , diseñada para resolver las deficiencias en la forma en que se manejaron los valores enumerados en las versiones anteriores de Java. En su forma más básica , adopta una estructura similar a la del tipo de enumeración en lenguajes basados en C , pero es mucho más potente. La enumeración de objetos
Antes de pasar a las enumeraciones sí mismos, que es mejor para ilustrar el problema de que el nuevo tipo de enumeración fue creado para resolver. Considere la clase siguiente :
Calendario clase pública {
int díadelasemana GO
público static final int Lunes = 0
GO public static final int = Martes 1
GO public static final int = Miércoles 2
GO ....
setDayOfWeek void (int fecha) { ... } }
Esta clase almacena el día de la semana, utilizando un conjunto de constantes enumeradas con valores enteros de 0-7 , cada uno correspondiente a un día diferente, y se espera que otros desarrolladores que utilizan esta clase usarán esas constantes al utilizar la clase . Sin embargo , nada hace cumplir esto. Otras clases podían ignorar las constantes , utilice sus propias constantes (comenzando con el domingo , tal vez) por error, o incluso , como resultado de un error , pase \\ ", 8 \\ " como un día de la semana , lo que podría permitir que un insecto se propague más allá de lo que debería. También es particularmente informativo en la depuración , ya que el valor de \\ " díadelasemana \\ " se imprimirá en la consola o en un depurador simplemente como un número entero que tiene que ser visto en el código fuente . Las enumeraciones están diseñados para hacer frente a todas estas cuestiones. La siguiente es la misma clase , utilizando el tipo de enumeración en lugar de un conjunto de constantes enumeradas :
pública Calendario clase {
public enum { Día Lunes , Martes , Miércoles , Jueves , Viernes , Sábado , Domingo
}
Día díadelasemana
void setDayOfWeek (Día d ) {... } }
El código anterior , además de ser más limpio y más fácil de leer , se dirige a todos los problemas mencionados anteriormente con constantes enumeradas . Los clientes están obligados a usar sólo los valores enumerados a sí mismos , y depuradores se mostrará el nombre del valor enumerado y no es un entero . Además , las enumeraciones tienen un número de otras ventajas . Por ejemplo , se pueden utilizar con el nuevo para - cada característica de bucle que se añadió en Java 1.5.0 . La clase Calendar podría incluir método de la siguiente manera:
printDays void () {
para el (día d: Day.values ( ) ) {
System.out.println ( "Hoy es " + d )
GO } }
Este método recorrer todos los días e imprimir sus nombres.
Las enumeraciones son clases en su propio derecho , lo que significa que pueden tener sus propios métodos y constructores . Considere la siguiente enumeración , que almacena los personajes en una obra, lo que permite , con una breve descripción de ese personaje :
public enum Carácter {
MYSTERIOUS_MAN ( " Alto, moreno y guapo. ") ,
MYSTERIOUS_WOMAN ( " Con un vestido rojo. ") ,
protagonista ( " Dashing y heroico. ") ,
ANTAGONISTA ( " Rebosante mal . ");
cadena Descripción GO
Character (descripción String) {
this.description = Descripción
GO } }