
Hasta antes de la aparición de Java 5, para poder representar determinados valores constantes o tipos de datos enumerados, usualmente teníamosque recurrir a interfaces, ya que estas nos permiten definir valores constantes, estáticos y públicos que pueden ser referenciados desde cualquier sección de código.
Sin embargo, para los amantes de un código limpio (como yo xD), esta solución no convence ya que no es el objetivo de una interface (o de una clase si es que es utilizada para este propósito) el ser un contenedor de constantes.
Afortunadamente para nosotros, desde la versión 5 de Java se incluyeron los Enums (o enumeraciones). Los Enums son objetos especiales de Java (como los arreglos) que sirven como tipos de datos que almacenan un conjunto fijo de valores y justamente resuelven el problema de tener constantes desperdigadas en interfaces y clases.
Una enumeración, en su forma más básica, se define de la siguiente manera:
enum DireccionesBrujula{ NORTE, OESTE, SUR, ESTE }
Como podemos observar en la declaración anterior, la palabra reservada
enum nos indica que se va a definir una enumeración. En su contenido se definen las constantes de la enumeración, separadas por comas.
¿Y dónde puede ser usada una enumeración? Pues en todos los sitios donde puede ser usada una clase, se puede user como miembro de una clase, como variable local, etc.
En una clase Barco podría ser útil la dirección que se está cursando. Entonces la enumeración se usaría de la siguiente manera:
class Barco{
DireccionBrujula curso;
}
Y para asignarle un valor a la enumeración, se deben usar cualquiera de los valores constantes que hemos definido. Por ejemplo:
curso = DireccionBrujula.NORTE;
Otra ventaja que tenemos al usar una enumeración, es que pueden ser usadas dentro de expresiones switch, como si fuera una constante entera.
switch (curso){ case NORTE:
System.out.println("Estamos en la dirección correcta");
break;
case SUR:
System.out.println("¡Estamos en la dirección contraria!");
break;
default:
System.out.println("Estamos perdidos...");
break;
}
Otro punto que debemos tener en cuenta es que un Enum puede ser definido dentro o fuera de una clase, y de acuerdo a esto cambia la forma en la que se acceden a sus constantes.
class Barco{
enum DireccionesBrujula{ NORTE, OESTE, SUR, ESTE }
DireccionesBrujula curso;
}
Si la enumeración esta definida de esta manera, entonces la forma de acceder a sus constantes desde fuera de la clase Barco (siempre y cuando los modificadores de acceso nos lo permitan) sería:
DireccionesBrujula direccion = Barco.DireccionesBrujula.NORTE;
Pero con lo mostrado hasta ahora los Enums pueden parecer unos simples tipos de datos para representación de constantes, sin embargo el poder verdadero de estos se aprovecha cuando se le definen variables de instancia, constructores y métodos. Sin embargo no quiero hacer este post muy largo así que lo dejaré para una segunda parte.