Tipos Enumerados , Enum

 A partir de Java 5,  se integraron nuevos elementos que permiten mejorar nuestro codigo java.

Los Enum.
Los enum sirven para restringir el valor de una variable solo a unos determinados valores. Si antes usabas una clase con constantes estaticas ahora podras usar los enum.
Los enum no son clases en si, son elementos que podemos definir dentro de una clase, o fuera (no hace falta que pertenezcan a ninguna).

Asi por ejemplo tenemos una clase Libro, que tiene unas propiedades (nacionalidad, tipo y titulo):

public class Libro {
    private String tematica;
    private String nacionalidad;
    private String titulo;
  
    public Libro (String tematica, String nacionalidad, String titulo){
        this.tematica = tematica;
        this.nacionalidad = nacionalidad;
        this.titulo = titulo;
    }
  
}

Con este codigo, podemos pasarle cualquier String en los parametros del constructor  y crear un objeto Libro.
Pero bien, ahora queremos,  restringir las nacionalidades y la tematica solo a unos valores. Con el codigo anterior deberiamos hacer comprobaciones de valores y demas...
Por el contrario si declaramos tipos enumerados, para esos parametros solo podra tener esos valores y en caso contrario saltara excepcion.

Como ya comente, no hace falta definir los enum dentro de una clase, asi que voy a ponerlos fuera, y voy a cambiar el tipo de los argumentos para que sepa que son de tipo enum, quedara algo asi:


package org.dppware.enumTest;

enum Tematica {AVENTURAS, DRAMA, TEATRO, NOVELA}; //tipos de libros disponibles
enum Nacionalidad {ESPAÑOLA, AUSTRALIANA, INGLESA}; //Nacionalidades posibles

public class Libro {
    private Tematica tematica;
    private Nacionalidad nacionalidad;
    private String titulo;
   
    public Libro (Tematica tematica, Nacionalidad nacionalidad, String titulo){
        this.tematica = tematica;
        this.nacionalidad = nacionalidad;
        this.titulo = titulo;
    }
   
}

Vemos los enum fuera, (son tipos,  no hace falta hacer new de ellos ni instanciarlos). Y vemos que los argumentos ahora se restringen a los valores de los enum.
Asi ahora podemos instanciar un libro de esta manera :

//no necesitamos import de los enum, porque estan definidos fuera de la clase
//si estuvieran definidos dentro de Libro, deberiamos añadir:
//import org.dppware.enumTest.Libro.Nacionalidad;
//import org.dppware.enumTest.Libro.Tematica;

    public static void main(String[] args) {
        Libro a = new Libro (Tematica.AVENTURAS, Nacionalidad.ESPAÑOLA, "Quijote");
    }

Si por ejemplo el valor que nos viene es un String, los enum nos dan herramientas que podemos obtener el tipo enumerado a partir de un String. Lo vemos aqui:
    public static void main(String[] args) {
        Libro a = new Libro (Tematica.AVENTURAS,
                            Nacionalidad.valueOf("ESPAÑOLA"),
                            "Quijote");
    }
Vemos que el enum de Nacionalidad lo saca a partir de un String. El metodo ValueOf busca la similitud deacuerdo al String pasado, en caso de no encontrarse saltara la excepcion.

Los enums nos permiten de esta forma restringir nuestro codigo y evitar posibles errores.

Para ver un uso mas avanzado de los enum visitar este otro post

Comentarios

Entradas populares de este blog

Subir campos Blob a BBDD (Oracle) con Java

Reiniciar usuario de SVN Subversion

Cucumber y Java - definiendo test de una manera amigable