[Java 5.0] tipos enumerados

2338 vistas

Definición:
Un enum representa un tipo enumerado, es decir, un tipo que sólo acepta un número finito de elementos.

Uso:
En su forma más básica, un enum contiene simplemente la lista de los posibles valores que puede tener.

Veamos un ejemplo de enum que contiene las estaciones:



java
  1. public enum Season {
  2.   spring, summer, autumn, winter;
  3. }



No obstante, una enumeración es como una clase Java, es decir, acepta propiedades, métodos y constructores.

En el ejemplo anterior, podrÃamos completar la enum con los nombres de las estaciones en español:



java
  1. public enum Season {
  2.   spring("Primavera"), summer("Verano"), autumn("Otoño"), winter("Invierno");
  3.   protected String label;
  4.  
  5.   /** constructor */
  6.   Season(String pLabel) {
  7.       this.label = pLabel;
  8.   }
  9.  
  10.   public String getLabel() {
  11.       return this.label;
  12.   }
  13. }



Los constructores de los enum no aceptan modificadores de accesivilidad (public, protected,...) devido a que sólo se usan para inicializar los diferentes valores de la enumeración. Por lo tanto, el siguiente código es incorrecto:



java
  1. Season s = new Season ("Invierno");



Además, cada enum tiene dos métodos estáticos implÃcitos que permiten acceder a los diferentes valores:

  • Season.values(): devuelve una tabla de Season con todos los valores posibles
  • Season.valueOf(String): devuelve la Season del nombre pasado por parámetro (por ejemplo, Season.valueOf("spring") devolverá Season.spring).

Los diferentes valores del enum son constantes estáticas y públicas y son accesibles directamente como los campos public static (por ejemplo con Season.winter).

Por lo tanto, los enums puedes ser usados directamente en un switch:



java
  1. public void metodo (Season season) {
  2.   switch (season) {
  3.       case spring:
  4.         System.out.println("Los árboles florecen!!!");
  5.         break;
  6.       case summer:
  7.         System.out.println("Hace calor!!!");
  8.         break;
  9.       case automn:
  10.         System.out.println("Las hojas caen...");
  11.         break;
  12.       case winter:
  13.         System.out.println("Nieva!!!");
  14.         break;
  15.   }
  16. }