Java: Ejemplo de uso de tipos enumerados (enum)

Los tipos enumerados sirven para restringir el contenido de una variable a una serie de valores predefinidos. Esto suele ayudar a reducir los errores en nuestro código.

A partir de Java SE 5.0 se incluyo una modalidad de tipos enumerados que mantiene la seguridad de los tipos. En la práctica viene a ser como si definiéramos nuestros propios tipos de variables.

En Java, los tipos enumerados se pueden definir fuera o dentro de una clase. Otra ventaja que traen los tipos enum de Java es que al ser una “especie de clase” podemos añadirles métodos, variables de instancia, constructores, etc… lo que los hace muy potentes.

A continuación os dejo un pequeño ejemplo que ilustra todos estos conceptos.

/*
 *   http://creativecommons.org/licenses/by-nc/3.0/deed.es
 */
package org.francho.java.ejemplos;

/*
 *
 * @author francho - http://francho.org/lab/
 */

/*
 * Un tipo enumerado "complejo", tiene sus propios métodos y constructor
 */

enum Vaso {
    // Tipos de vaso disponibles. Pasan al constructor su capacidad en cc.
    JARRA(500), TUBO(250), TERCIO(333), CAÑA(200);

    private int cc; // Variable interna donde almacenaremos la capacidad

    // Nuestro constructor nos fuerza a pasar parámetros al definir un nuevo tipo
    Vaso(int cc) {
        this.cc = cc;
    }

    // Devuelve la capacidad del vaso
    public int getCentimetrosCubicos() {
        return cc;
    }
}

/*
 * Definimos un tipo de bebida
 */

class BebidaCerveza {
    enum MarcaCerveza { AMBAR, GUINNESS, HEINEKEN } // Tipos enumerados sencillos. Solo tenemos estas marcas

    private Vaso vaso;
    private MarcaCerveza marca;

    BebidaCerveza(MarcaCerveza marca, Vaso vaso) {
        this.marca = marca;
        this.vaso = vaso;
    }

    public void servir() {
        System.out.println("Sirviendo " + vaso.getCentimetrosCubicos() + "cc. de cerveza " + marca);
    }
}

/*
 * Clase pública que prueba todo esto
 */

public class PruebaEnum {
    public static void main(String[] args) {
        BebidaCerveza birra = new BebidaCerveza(BebidaCerveza.MarcaCerveza.AMBAR, Vaso.JARRA);

        birra.servir();
    }
}

Advertisement

Acerca de francho

Geek Maño. Artesano de software, programador Android en activo, sysop retirado. Linuxero de corazón, maquero recién convertido. Ocasionalmente: consultor de Internet, profesor... Más en francho.org

Publicado el 7 enero, 2010 en Java y etiquetado en , , . Guarda el enlace permanente. 5 comentarios.

  1. Gracias Francho, me ha sido de mucha ayuda. Gracias.

  2. De nada. Me alegro de que te haya servido

  3. Gracias por la explicación!
    ademas es un buen ejemplo
    me ha servido de mucho!!

  4. ¿Es más correcto si haces los enum públicos? Porque en mi IDE hasta que no lo he hecho me daba un warning.
    Saludos y gracias!

  5. nessiagp eso depende del ámbito donde los vas a usar. Si los quieres usar fuera del paquete debes declararlos públicos como indicas.

    Un saludo

Deja un comentario

Fill in your details below or click an icon to log in:

Gravatar
Logo de WordPress.com

You are commenting using your WordPress.com account. Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.

Únete a otros 474 seguidores