Cómo utilizar Enum Types en Java

Si queremos una lista de valores predeterminada tendremos que recurrir a la enumeraciones o Enum Types, un tipo de variables de Java que puedes definir en tu código y que, al igual que todas las variables, son modificables. En este artículo, os explicaremos cómo utilizar en vuestro código estos Enum Types para que le saquéis todo el partido posible. Para entrar más en materia decir que, las enumeraciones, son un tipo de dato el cual cuenta con un conjunto de valores que se pueden modificar por el desarrolladores.

¿Cómo empezar?

Para declarar este tipo de dato, existe una palabra reservada, al igual que las clases e interfaces, con la que podemos definir una enumeración. Esa palabra es enum. Podemos definir los Enum Types para establecer los distintos valores posibles al igual que hacemos con las constantes estáticas en el cuerpo de una declaración:

package co.com.mm.enumeraciones;
 
public enum Estado {
     
    /**
     * Indica que el proceso no ha iniciado.
     */
    POR_INICIAR,
    /**
     * Indica que el proceso inicio pero no ha finalizado.
     */
    EN_PROGRESO,
    /**
     * Indica que el proceso finalizo correctamente.
     */
    FINALIZADO,
    /**
     * Indica que el proceso finalizo con errores.
     */
    ERROR;
}

Como puedes ver en el anterior código, estamos definiendo una enumeración la cual contiene múltiples valores para determinar el estado de un proceso. Para llevarlo a cabo, en el cuerpo donde establecemos la enumeración, definimos varios nombres que harían referencia a uno de los estados que hemos configurado anteriormente.

¿Cómo utilizar las enumeraciones?

Vamos a crear una clase main donde verás la utilización de los tipos enum

package co.com.mm.enumeraciones;

public class Main {
     
    public static void main(String[] args) {
        imprimirMensaje(Estado.POR_INICIAR);
        imprimirMensaje(Estado.EN_PROGRESO);
        imprimirMensaje(Estado.FINALIZADO);
        imprimirMensaje(Estado.ERROR);
    }
     
    /**
     * Imprime un mensaje de acuerdo a la enumeraci&aocute;n.
     * @param estado
     */
    public static void imprimirMensaje(Estado estado) {
        switch(estado) {
            case POR_INICIAR:
                System.out.printf("El proceso aún no ha iniciado. " +
                    "Estado: [ %s ].", estado.name());
                break;
            case EN_PROGRESO:
                System.out.printf("El proceso se encuentra en progreso. " +
                    "Estado: [ %s ].", estado.name());
                break;
            case FINALIZADO:
                System.out.printf("El proceso finalizó correctamente. " +
                    "Estado: [ %s ].", estado.name());
                break;
            case ERROR:
                System.out.printf("El proceso finalizo con errores. " +
                    "Estado: [ %s ].", estado.name());
                break;
        }
         
        System.out.println();
    }
}

Destacar del código anterior los siguientes aspectos: Si os habéis dado cuenta, al igual que pasa con los tipos de datos ordinarios, las clases y también las interfaces, los Enum Types definen un tipo de dato que más tarde podemos referenciar con el nombre del mismo. También podemos utilizar switch para comprobar el CASE sobre cada enumeración, esto es posible ya que este tipo de datos se comprueba de la misma manera que los tipos de datos que solemos utilizar a menudo. Por última, deciros también que las enumeraciones cuentan con un método por defecto llamado name que devuelve un string con el nombre del elemento enumerado.

Enumeración con constructor

A continuación os vamos a explicar como manejar la enumeración con constructor, y así ampliarlo con más información que el nombre de los elementos a enumerar. Para ello, podemos creamos un constructor que agregue estos valores adicionales de los que te hemos hablado antes.

package co.com.mm.enumeraciones;
 
/**
 * Enumeracion que define los diferentes estados de un proceso X.
 */
public enum Estado {
     
    /**
     * Indica que el proceso no ha iniciado.
     */
    POR_INICIAR("El proceso aún no ha iniciado. Estado: [ %s ]."),
    /**
     * Indica que el proceso inicio pero no ha finalizado.
     */
    EN_PROGRESO("El proceso se encuentra en progreso. Estado: [ %s ]."),
    /**
     * Indica que el proceso finalizo correctamente.
     */
    FINALIZADO("El proceso finalizó correctamente. Estado: [ %s ]."),
    /**
     * Indica que el proceso finalizo con errores.
     */
    ERROR("El proceso finalizo con errores. Estado: [ %s ].");
     
    /**
     * Mensaje del estado.
     */
    private String mensaje;
     
    private Estado(String mensaje) {
        this.mensaje = mensaje;
    }
     
    /**
     * Retorna el mensaje de la enumeración.
     * @return
     */
    public String getMensaje() {
        return this.mensaje;
    }
}

En este ejemplo, hemos definido:

  • Un constructor el cual os obligatorio poner como privado para poder esperar la lista de valores de las enumeraciones y no otras instancias.
  • Un método llamado getMensaje que puede ser llamado por clientes de la enumeración para obtener el mensaje correspondiente
  • Parentesis en los elementos de la enumeración, para que cada elemento represente una instancia de la enumeración.

A continuación, vamos a modificar la clase main para adaptarla a las nuevas características del Enum Type

package co.com.mm.enumeraciones;

public class Main {
 
    public static void main(String[] args) {
        imprimirMensaje(Estado.POR_INICIAR);
        imprimirMensaje(Estado.EN_PROGRESO);
        imprimirMensaje(Estado.FINALIZADO);
        imprimirMensaje(Estado.ERROR);
    }
 
    /**
     * Imprime un mensaje de acuerdo a la enumeraci&aocute;n.
     *
     * @param estado
     */
    public static void imprimirMensaje(Estado estado) {
        System.out.printf(estado.getMensaje(), estado.name());
        System.out.println();
    }
}

Como puedes ver hemos simplificado el ejemplo para usar la enumeración de una manera más óptima.

Y este ha sido el tutorial sobre cómo utilizar Enum Types en Java, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!

Vía: aquiseprograma.co

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP