Una práctica habitual en programación es tener un número finito de nombres simbólicos que representan los valores de un atributo. Por ejemplo, sería posible crear un conjunto de símbolos que representasen los palos de una baraja de cartas: PICAS, CORAZONES, TREBOLES y DIAMANTES. Esta forma de representación se suele denominar tipo enumerado.
Java SE incluye una modalidad de tipos enumerados que mantiene la seguridad de los tipos (typesafe enum). En el siguiente ejemplo se muestra un tipo enumerado para representar los palos de una baraja de cartas. Piense en el tipo Palo como en una clase con un conjunto finito de valores que reciben los nombres simbólicos incluidos en la definición del tipo. Por ejemplo, Palo.PICAS es del tipo Palo.
|
1 2 3 4 5 6 7 |
public enum Palo{ PICAS, CORAZONES, TRBOLES, DIAMANTES } |
El siguiente código muestra cómo la clase NaipeBaraja utiliza el tipo Palo para el tipo de datos del atributo palo.

Veamos otro ejemplo, queremos definir los diferentes estados civiles que puede tener una persona.
|
1 2 3 4 5 6 |
public enum EstadoCivil { // Estaticos y finales SOLTERO, CASADO, VIUDO, DIVORCIADO; } |
Al crear la clase en el atributo estadoCivil indicaremos que es del tipo «EstadoCivil», por lo que solo podrá adquirir los valores tipificados en la clase Enum
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
public class Persona { private String nombre; private int edad; private EstadoCivil estadoCivil; public Persona(String nombre, int edad, EstadoCivil estadoCivil) { this.nombre = nombre; this.edad = edad; this.estadoCivil = estadoCivil; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public EstadoCivil getEstadoCivil() { return estadoCivil; } public void setEstadoCivil(EstadoCivil estadoCivil) { this.estadoCivil = estadoCivil; } @Override public String toString() { return "Persona [nombre=" + nombre + ", edad=" + edad + ", estadoCivil=" + estadoCivil + "]"; } } |
Para crear el objeto siempre tenemos que definir cual de los valores de las opciones disponible tomara el atributo:
|
1 2 3 4 5 6 7 8 9 10 |
public class Main { public static void main(String[] args) { Persona p = new Persona("Juan", 23, EstadoCivil.SOLTERO); System.out.println(p); } } |
TIPOS ENUMERADOS AVANZADOS
Existe otra forma de trabajar con tipos Enumerados para facilitar la lectura al usuario, dado que en los ejempos anteriores mostraria el nombre simbolico, el cual no siempre será lo que queramos que se imprima al llamarlo.
El siguiente código muestra una versión mejorada de una clase Enumerada con un atributo alias y un método ver. Observe cómo se oculta la información de la forma adecuada con el atributo “private” y el método de acceso “public”.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public enum PuntosCardinales { NORTE ('N'), SUR ('S'), ESTE ('E'), OESTE ('O'); private char alias; private PuntosCardinales(char letra){ alias = letra; } public char ver(){ return alias; } public static void main(String[] args) { PuntosCardinales p = PuntosCardinales.NORTE; System.out.println(p.ver()); } } |