SCJP - Enums Parte 1



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.

3 comments

y la segunda parte? La verdad bastante interesante tu blog, me imagino que por el trabajo ni tiempo como para ser más constante con los posts, pero la mayoría muy útiles e interesantes.
Yo quiero "iniciarme" como desarrollador en Java; tengo conocimiento empírico del lenguaje por haber hecho algunas pequeñas aplicaciones usando swing y algunas web, pero la teoría es casi nula (recién ando leyendo algunas especificaciones del lenguaje y entendiendo algunas cosas que antes usaba por repetición). Qué opinión te merece la adquisión de Sun por parte de Oracle? Las certificaciones van ya cambiando de nombre y todo? Qué tan necesario es certificarse?

Reply

Hola Kryz, gracias por la visita :D. Este post no lo hice yo, sino un colaborador que esperemos se anime retomar el blog. Tienes razón en lo que soy un poco inconstante con esto del blog, pero prometo retomarlo apenas encuentre un poquito más de tiempo. Saludos!

Reply

A ver si esta semana hago la segunda parte, aunque creo que ya no tengo permisos de publicación xD

Reply

Publicar un comentario