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....
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
Publicar un comentario