Enumeraciones

Las enumeraciones o tipos enumerados en Java son un tipo de dato al que se le pueden definir una serie limitada de posibles valores, que además podemos definir en el momento de la creación de esa enumeración.

. . .
public enum Direccion {
    ARRIBA, ABAJO, IZQUIERDA, DERECHA
}
. . .
private Direccion direccion;
. . .
direccion = Direccion.ARRIBA;
. . .
direccion = Direccion.ABAJO;
. . .
switch (direccion) {
    case ARRIBA:
        . . .
        break;
    case ABAJO:
        . . .
        break;
    case DERECHA:
        . . .
        break;
    case IZQUIERDA:
        . . .
        break;
}

En el ejemplo anterior, se ha definido una enumeración \verb Direccion que define 4 posibles valores. Más adelante se ha declarado una variable \verb direccion del tipo enumerado, que vemos cómo puede tomar cualquiera de los valores del tipo enumerado (y ninguno otro), y más adelante se puede ver lo cómodo que es utilizar un tipo enumerado con un switch para evaluar su valor, con un código mucho más legible que si hubieramos utilizado una variable de tipo \verb String o bien 4 constantes independientes. Hay que tener en cuenta que el uso de las enumeraciones minimiza la posibilidad de error puesto que la variable nunca podrá tomar un valor que no le corresponda según el tipo enumerado con el que fue definido, algo que si podría ocurrir si utilizaramos un \verb String , constantes o cualquier otra fórmula que se nos pudiera ocurrir.

También es posible declarar enumeraciones como una clase con la finalidad de añadir atributos y métodos. Por defecto, se incluyen algunos métodos que pueden ser de gran utilidad:

. . .
Direccion direccion = Direccion.ARRIBA;
System.out.println(direccion.name());       // "ARRIBA"
System.out.println(direccion);              // "ARRIBA"
String arriba = direccion.name();           // "ARRIBA"
 
// Lista todos los valores posibles de la enumeración
for (Direccion dir : Direccion.values())
    System.out.println(dir);          
 
Direccion direccionArriba = Direccion.valueOf("ARRIBA");    // Direccion.ARRIBA
. . .

Y también es posible, en el momento de definir un tipo enumerado, añadir constructor, atributos y métodos, para usarlo como si de una clase Java se tratara.

public enum Estacion {
    PRIMAVERA (10, 20.5f),
    VERANO (23, 40),
    OTONO (5.3f, 15),
    INVIERNO (-2.1f, 10);
 
    private final float temperaturaMinima;
    private final float temperaturaMaxima;
 
    Estacion(float temperaturaMinima, float temperaturaMaxima) {
        this.temperaturaMinima = temperaturaMinima;
        this.temperaturaMaxima = temperaturaMaxima;
    }
 
    public float temperaturaMinima() { return temperaturaMinima; }
    public float temperaturaMaxima() { return temperaturaMaxima; }
    public float diferenciaTemperatura() { 
        return (temperaturaMaxima - temperaturaMinima); 
    }
}
 
. . .
 
Estacion primavera = Estacion.PRIMAVERA;
System.out.println(primavera.temperaturaMinima());    // 10.0
System.out.println(primavera.diferenciaMinima());    // 10.5
. . .

© 2019-2024 Santiago Faci