Tipos Enumerados II , Enums

Hemos visto en este otro post que son los enum y para que nos valen. Hemos puesto un ejemplillo en modo sencillo, pero vamos a ver un poco mas la funcionalidad de los enum.

Pongamos el enum Nacionalidad:

enum IDIOMA (ESPAÑOL , INGLES)
Podemos hacer comprobaciones con este enum de manera sencilla, pero pongamos por ejemplo que queremos tener mas datos en ese enum,  no solo el nombre, si no tambien el sufijo que suele tener y una descripcion.(De esta forma dejamos de pensar los enum como unos simples valores fijos )

enum Nacionalidad {
    ESPAÑOLA("es", "se entiende"),
    AUSTRALIANA("aus", "de las antipodas"),
    INGLESA("en_GB", "para guiris");

};

Vemos que nuestro enum Nacionalidad ahora tiene mas informacion, y esto nos gusta mas.
El codigo que acabo de poner arriba no compila, debido a que la clase Enum por defecto solo soporta un argumento (name)  y el indice:

//sacado de la abstrac class enum   
protected Enum(String name, int ordinal) {
    this.name = name;
    this.ordinal = ordinal;
}


Asi que dentro del enum debemos especificar que queremos un constructor que admita varios parametros.
Este constructor será llamado por la Jre cuando intente instanciar nuestros enum en memoria.
Para definirlo seria tan facil como esto:

enum Nacionalidad {
    ESPAÑOLA("es", "se entiende"),
    AUSTRALIANA("aus", "de las antipodas"),
    INGLESA("en_GB", "para guiris");
  
    Nacionalidad(String signature, String descripcion){
        this.signature = signature;
        this.descripcion = descripcion;
  
    }
    //Propiedades
    private String signature;
    private String descripcion;
  
    //metodos acceso
    public String getSignature(){
        return this.signature;
    }
    public String getDescripcion(){
        return this.descripcion;
    }
};

El constructor es necesario definirlo, para que la Jre pueda instanciarlos.
Tambien vemos, como podemos definir propiedades para los enum.
Ahora todos los enum (ESPAÑOLA, INGLESA, AUSTRALINA) ,van a tener 2 propiedades signature y descripcion, que podemos acceder a ellas mediante sus metodos get. (No olvidar que por defecto todos los enum tienen una propiedad llamada "name")

Ahora podemos acceder al enum y ver su informacion:

System.out.println(Nacionalidad.ESPAÑOLA.getSignature());
etc....

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