Un tipo de enumeración es un tipo de dato especial que permite que una variable sea un conjunto de constantes predefinidas.
La variable debe ser igual a uno de los valores predefinidos para ella.
Entre los ejemplos comunes se incluyen las direcciones de la brújula (valores NORTH, SOUTH, EAST y WEST) y los días de la semana.
Como son constantes, los nombres de los campos de un tipo de enumeración se escriben en letras mayúsculas.
En el lenguaje de programación Java, defines un tipo de enumeración usando la palabra clave enum.
Por ejemplo, especificarías un tipo de enumeración para los días de la semana así:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Deberías usar tipos de enumeración cada vez que necesites representar un conjunto fijo de constantes. Eso incluye tipos de enumeración naturales, como los planetas de nuestro sistema solar, y conjuntos de datos en los que conoces todos los valores posibles en tiempo de compilación; por ejemplo, las opciones de un menú, las opciones de línea de comandos, y así sucesivamente.
Aquí tienes un código que te muestra cómo usar el enum DayOfWeek definido antes:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
Los tipos de enumeración del lenguaje de programación Java son mucho más poderosos que sus equivalentes en otros lenguajes.
La declaración enum define una clase (llamada tipo de enumeración).
El cuerpo de la clase enum puede incluir métodos y otros campos:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
Llamar al método getNumberOfStars en un miembro del tipo de enumeración Rating:
Rating.GOOD.getNumberOfStars();
// => 4
El compilador agrega automáticamente algunos métodos especiales cuando crea un enum.
Por ejemplo, tienen un método estático values que devuelve un array que contiene todos los valores del enum en el orden en que se declaran:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
El fragmento anterior imprimiría lo siguiente:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
El compilador también agrega un método estático valueOf que devuelve un miembro del enum a partir de su nombre:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY