Java: Ejemplo de uso de tipos enumerados (enum)

by Francho Joven

07 Jan 2010

. Comments

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.

<br />
/*<br />
 *   http://creativecommons.org/licenses/by-nc/3.0/deed.es<br />
 */<br />
package org.francho.java.ejemplos;</p>
<p>/*<br />
 *<br />
 * @author francho - http://francho.org/lab/<br />
 */</p>
<p>/*<br />
 * Un tipo enumerado &quot;complejo&quot;, tiene sus propios métodos y constructor<br />
 */</p>
<p>enum Vaso {<br />
    // Tipos de vaso disponibles. Pasan al constructor su capacidad en cc.<br />
    JARRA(500), TUBO(250), TERCIO(333), CAÑA(200);</p>
<p>    private int cc; // Variable interna donde almacenaremos la capacidad</p>
<p>    // Nuestro constructor nos fuerza a pasar parámetros al definir un nuevo tipo<br />
    Vaso(int cc) {<br />
        this.cc = cc;<br />
    }</p>
<p>    // Devuelve la capacidad del vaso<br />
    public int getCentimetrosCubicos() {<br />
        return cc;<br />
    }<br />
}</p>
<p>/*<br />
 * Definimos un tipo de bebida<br />
 */</p>
<p>class BebidaCerveza {<br />
    enum MarcaCerveza { AMBAR, GUINNESS, HEINEKEN } // Tipos enumerados sencillos. Solo tenemos estas marcas</p>
<p>    private Vaso vaso;<br />
    private MarcaCerveza marca;</p>
<p>    BebidaCerveza(MarcaCerveza marca, Vaso vaso) {<br />
        this.marca = marca;<br />
        this.vaso = vaso;<br />
    }</p>
<p>    public void servir() {<br />
        System.out.println(&quot;Sirviendo &quot; + vaso.getCentimetrosCubicos() + &quot;cc. de cerveza &quot; + marca);<br />
    }<br />
}</p>
<p>/*<br />
 * Clase pública que prueba todo esto<br />
 */</p>
<p>public class PruebaEnum {<br />
    public static void main(String[] args) {<br />
        BebidaCerveza birra = new BebidaCerveza(BebidaCerveza.MarcaCerveza.AMBAR, Vaso.JARRA);</p>
<p>        birra.servir();<br />
    }<br />
}<br />