Ir al contenido principal

Los tipos enumerados (enums) en Java

Tipos Enumerados

En Java 5 se permite que una variable tenga solo un valor dentro de un conjunto de valores predefinidos, en otras palabras, valores dentro de una lista enumerada. Los tipos enumerados sirven para restringir la selección de valores a algunos previamente definidos, p. ej., si tenemos una aplicación para la venta de café en vasos de diferentes tamaños pero no queremos que los tamaños sean diferentes a CHICO, MEDIANO y GRANDE, podemos crear un tipo enumerado para delimitar dicha selección:


enum TamanoDeCafe{CHICO,MEDIANO,GRANDE};



Posteriormente, al elegir un tamaño de café podemos hacerlo de la siguiente manera:


TamanoDeCafe tdc = TamanoDeCafe.MEDIANO;


No es necesario que las constantes dentro de los enums estén en mayúsculas pero en las convenciones de código de Sun se pide hacerlo de esta manera. Se debe tomar en cuenta que un tipo enumerado puede ser declarado dentro o fuera de una clase, pero NO dentro de un método. P. ej.:

enum instrumentos{ 
   GUITARRA, TROMPETA, BATERIA, BAJO
};

public class Enumerados {

   public Enumerados() {
   }

   public static void main (String... args){
      instrumentos in = instrumentos.BATERIA; 
      System.out.println(in);
      EnumDentroClase edc = new EnumDentroClase();
      edc.tamano = EnumDentroClase.TamanoDeCafe.CHICO;
      System.out.println(edc.tamano);
   }

}

class EnumDentroClase{

   enum TamanoDeCafe {GRANDE,MEDIANO,CHICO};

   TamanoDeCafe tamano;
}

Nota: el punto y coma (;) al final de la declaración del tipo enumerado es opcional.

Al ejecutar el código anterior, obtenemos:

BATERIA
CHICO

Los tipos enumerados no son enteros o cadenas, cada uno es simplemente una instancia del tipo enumerado del que es declarado. Se puede pensar como una especie (no exactamente) de arreglo de variables estáticas finales. Además de constantes dentro de un tipo enumerado, existen algunas otras cosas que puede tener.


Declarar constructores, métodos y variables dentro de un tipo enumerado::

Debido a que los tipos enumerados son como una clase de tipo especial en Java, hay muchas cosas que se pueden realizar dentro de un enum, además de declarar constantes, un tipo enumerado puede contener constructores, métodos y variables.

Tomando nuestro ejemplo del tamaño de café, podemos pensar en escenario donde además de saber el tamaño del café necesitemos la cantidad en onzas de cada tamaño, esto podemos hacerlo de la siguiente manera:

enum TamanoCafe{

   CHICO(5), MEDIANO(8), GRANDE(10);

   private int onzas;

   TamanoCafe(int onzas){
      this.onzas = onzas;
   }

   public int getOnzas(){
      return this.onzas;
   }

}

public class Cafe {
   TamanoCafe tc;
   public Cafe() {
   }

   public static void main(String... args){
      Cafe c1 = new Cafe();
      Cafe c2 = new Cafe();
      c1.tc = TamanoCafe.GRANDE;
      c2.tc = TamanoCafe.CHICO;

      System.out.println("Tamaño de café 1(c1): "+c1.tc);
      System.out.println("Tamaño de café 2(c2): "+c2.tc);

      System.out.println("Onzas 1(c1): "+c1.tc.getOnzas());
      System.out.println("Onzas 2(c2): "+c2.tc.getOnzas());
   }

}

Al ejecutar el código anterior obtendremos lo siguiente:

Tamaño de café 1(c1): GRANDE
Tamaño de café 2(c2): CHICO
Onzas 1(c1): 10
Onzas 2(c2): 5

Algunos puntos importantes sobre los constructores de los tipos enumerados:

+ No se puede invocar al constructor directamente, este se invoca una vez que se crea el tipo enumerado y es definido por los argumentos utilizados para crearlo.
+ Se puede definir más de un argumento en un constructor de un tipo enumerado, asimismo, se puede definir más de un constructor para un tipo enumerado siempre y cuando este tenga argumentos diferentes(sobrecargar el constructor).

Esto es todo con respecto a los tipos enumerados. ¿Alguna duda? deja tu comentario.

Más sobre programación en Java aquí.

Comentarios

  1. muy buena explicacion muchas gracias!!!!

    ResponderBorrar
  2. No hay problema. Gracias por tu comentario. Saludox.

    ResponderBorrar
  3. Muchas gracias por la información

    Saludos
    Danny

    ResponderBorrar
  4. Gracias por el ejemplo, me ha ayudado mucho...

    ResponderBorrar
  5. hola, soy estudiante de ciclo de grado superior de informatica y tengo ciertas dudas con un problema parecido al de los cafés. Se nos pide que mostremos tres tipos de lavado de un autolavado de coches (BASICO,NORMAL,SUPER) junto con el tiempo en minutos de cada tipo (3,5,8), pero no se seria exactamente como tu ejemplo del cafe. ¿Podrias echarme una mano? Gracias

    ResponderBorrar
  6. muchas gracias por la informacion, muy util.

    ResponderBorrar
  7. Hola tu ejemplo es muy bueno, lo que aun me causa ruido es en que momento le das valor al atributo onzaz, es decir de donde sale la ultima informacion que se imprime (el 10 y el 5)

    ResponderBorrar
  8. El valor de 10 y 5 sale:
    System.out.println("Onzas 1(c1): "+c1.tc.getOnzas());
    System.out.println("Onzas 2(c2): "+c2.tc.getOnzas());
    en el enum esta declarado que grande es de 10 onzas, mediano de 8 onzas y chico de 5 onzas ;-)

    ResponderBorrar
  9. ufff que buena información la que encontré aquí, me fue super util para un proyecto de simulación de una sala de cine, me ahorro mucho tiempo, pues simplemente cree un tipo de película (debido a las restricciones de edad que permiten la entrada de ciertas personas de edad a un genero de películas en especifico)

    public enum Tipo_pelicula {

    ACCION,
    SUSPENSO,
    JUVENIL,
    ROMANCE
    }

    y luego solo debia llamarlas en la clase donde se genera la cartelera del cine asi:

    public void GenerarPeliculas()
    {
    Pelicula objPelicula1=new Pelicula("Rescate Explosivo",Tipo_pelicula.ACCION);
    Pelicula objPelicula2=new Pelicula("Duro De Matar",Tipo_pelicula.ACCION);
    ...
    }
    genial, gracias

    ResponderBorrar
  10. Copia casi textual del libro de Kathy Sierra para la certificación java 6.

    ResponderBorrar
  11. exelente material! felicitaciones!

    ResponderBorrar
  12. Copia de libro para certificacion.
    No entiendo porque das las gracias, tal vez porque tradujiste el libro?
    Saludos

    ResponderBorrar
  13. No importa que sea la copia de un libro, lo importante es que comparte el conocimiento a los que no tenemos acceso a ellos. Se agradece se tomen la molestia de trascribir el conocimiento.

    ResponderBorrar
  14. la vdd esk no c programar estoy en cero y sus esplicaciones son exelentes. pero kisiera preguntarle es dificil aprender a programar??? k es lo k necesito.
    soy de tenacingo,edo de mex

    ResponderBorrar
  15. veo que la publicacion es un poco vieja pero no por eso deja de ser bueno, muchisimas gracias muy buena explicacion. nos vemos

    ResponderBorrar
  16. en la vida real si son usados estos tipos? es decir para tipos de elementos usualmente uno usa un catalogo con datos desde la base de datos, en aplicaciones empresariales si son usados?

    ResponderBorrar
  17. Qué tal,

    El uso de los tipos enumerados depende directamente del programador. Es cierto que normalmente para un catalogo de opciones utilizamos el contenido de una tabla en la bd, sin embargo, existen casos muy particulares en los cuales los enums son bastante útiles, por ejemplo, cuando tienes un catalogo de pocas opciones que es casi seguro no cambiará por lo que una consulta a la bd es más un gasto de recursos.

    En lo particular sí utilizo los tipos enumerados en casos similares al que te comento.

    Espero haberte ayudado. Saludox.

    ResponderBorrar
  18. Gracias por la informacion muy buena, pero por que se usa el parentesis enfrente de Enum por ejemplo:

    public enum Suit
    {
    ESPADAS("espadas"),
    CORAZONES("corazones"),
    AZ("az"),
    DIAMANTES("diamantes");

    public final String nombre;

    private Suit(String nombre)
    {
    this.nombre=nombre;
    }

    public String getNombre()
    {
    return nombre;
    }
    }

    Si no pongo los datos enfrente del parentesis me marca un error de compilacion..

    de antemano gracias...

    ResponderBorrar
  19. Qué tal,

    En el código que indicas no logro detectar tu duda, tal vez quieras formular tu pregunta de una manera distinta o indicarme exactamente en qué línea tienes dudas.

    Saludos.

    ResponderBorrar
  20. Este blog ha sido eliminado por un administrador de blog.

    ResponderBorrar
  21. Interesante tema sombre los enumerados, de todo lo que llevo estudiado nunca me hablaron de ellos y se me hacen algo especiales es como una estructura de datos contenida en una clase, eso es mas o menos lo que me imagino pero muy buen tema gracias

    ResponderBorrar
  22. Buenas! me sirvio la info te tomo como referencias.

    Te dejo mi url : http://java-white-box.blogspot.com.ar/

    Saludos

    ResponderBorrar
  23. gracias me sirvio de mucho tu tutorial...

    ResponderBorrar
  24. Bueno que si eres bueno. Cuando busco un tema en el Google me envía a tu pagina siempre. Gracias por compartir.

    ResponderBorrar
  25. Más claro no canta un gallo, para este ejemplo, Anonymus. Se te agradece tu aportación. Mi duda es otra. Es un applet el twit ? cómo se puede hacer uno parecido para la pagina donde trabajo ? Gracias anticipadas.

    ResponderBorrar
  26. Hola, Soy estudiante de la utn de rosario. Me gusta la forma en la q explicas. No podríamos juntar para q me expliques lo dl tamaño del cafe? Bueno te dejo mi num +543414457843.;)

    ResponderBorrar
  27. Fabio,

    Agradezco tu comentario pero vivo en México y no sería posible llevar a cabo dicha reunión :yaoming:

    Saludos.

    ResponderBorrar
  28. EXCELENTE EXPLICACIÓN! ME FUE MUY ÚTIL. ESTOY EN CURSO DE JAVA Y LA PROFESORA NO SUPO EXPLICARLO. DECÍA QUE LE MARCABAN ERRORES POR PROBLEMAS DEL IDE. JAJAJAJA.

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.