Enumerandos
Un enumerado (enumeration) es un tipo de dato especial que sirve para definir un conjunto fijo de valores posibles. Es como decir: «esta variable solo puede tomar uno de estos valores predeterminados».
Por ejemplo, DiaDeLaSemana sería un tipo enumerado que puede tomar valores constantes: LUNES, MARTES...DOMINGO. Se define de la siguiente manera:
public enum DiaDeLaSemana{
LUNES,
MARTES,
MIERCOLES,
JUEVES,
VIERNES,
SABADO,
DOMINGO
}
Como puede verse, en la definición usamos la palabra clave enum en lugar de class. En el programa puede accederse a estos valores de la siguiente manera: DiaDeLaSemana.LUNES, etc. Del mismo modo se utiliza un archivo solo para el enumerado.
Podemos guardar en una variable el día de la semana que tenemos por ejemplo clase de programación con una variable de tipo DiaDeLaSemana:
DiaDeLaSemana claseProgramacion = DiaDeLaSemana.MARTES;
También podemos utilizar un enumerado dentro de una sola clase. Para ello realizamos la definición dentro del código de la clase.
public class Persona {
enum Sexo {MUJER, HOMBRE}
Sexo sexo;
//...
Persona(String nombre, int edad, double estatura, Sexo sexo){
//...
}
}
Para acceder al tipo Sexo desde código fuera de la clase Persona, tendremos que poner el nombre de la clase donde está definido:
Persona p = new Persona("Manuel", 32, 1.70, Persona.Sexo.HOMBRE);
Enumerados con atributos y métodos
Además de definir los enumerados, un enum también puede tener atributos y métodos, incluyendo constructores.
Los atributos de un enum en Java son similares a los atributos de una clase normal. Pueden ser de cualquier tipo de dato (como int, String, etc.) y se usan para almacenar información asociada con cada constante del enum.
enum DiaDeLaSemana {
LUNES(1), MARTES(2), MIERCOLES(3), JUEVES(4), VIERNES(5), SABADO(6), DOMINGO(7);
private int numeroDia; // Atributo
// Constructor
private DiaDeLaSemana(int numeroDia) {
this.numeroDia = numeroDia;
}
// Método para obtener el número del día
public int getNumeroDia() {
return numeroDia;
}
}
- El
enumDiaDeLaSemanadefine 7 constantes (LUNES, MARTES, etc.). - El atributo
numeroDiaalmacena un número que representa cada día. - El
enumtiene un constructor que inicializa el atributonumeroDiapara cada constante. - El método
getNumeroDia()devuelve para cada enumerado su día en número.
En Java, los enum pueden tener constructores, pero con algunas peculiaridades:
- El constructor de un
enumsiempre es privado o con nivel de visibilidad por defecto, lo que significa que no puede ser llamado fuera delenum. - El constructor es llamado automáticamente cuando se inicializan las constantes del
enum.