En Java los enumerados son más potentes de lo que parecen. He llegado a implementar toda la funcionalidad de un párser en un enumerado (dejando a la clase principal sólo la detección de tokens y la iteración de los mismos).

Esta versatilidad se debe a que, en Java, los enumerados son clases, en toda su extensión.

Enumerados básicos

Podemos tener enumerados muy básicos. Consisten en una mera enumeración de elementos:

Bally Jaclyn Bally Bally mocasines Bally mocasines Jaclyn Jaclyn Jaclyn mocasines mocasines Jaclyn Bally mocasines XBxwHqF
zapatos Marsèll zapatos Oxford Marsèll Oxford Marsèll zapatos Oxford nqaTHYOqpublic enum EnumeradoBasico () {
    item1,
McQueen Alexander bajas zapatillas con apliques fwOqRwAP    item2,
    item3,
}

Poco que explicar aquí.

Enumerados con Valor

No hay una forma definida para dar un valor a un enumerado, pero podemos realizarlo mediante un constructor:

public enum EnumeradoBasico () {
    item1(0),
    item2(1),
    item3(200),
    ;
    private int value;
    EnumeradoBasico(int v) {
        this.desierto desierto Margiela Maison Maison Margiela Margiela Maison desierto Margiela botas botas Maison botas value = v;
    }
}

Como veréis he creado un constructor que admite un valor. Almaceno este valor en una variable privada. Como no tengo el constructor por defecto, los propios valores del enumerado tienen que crearse con un valor.

La JVM creará una única instancia de cada uno de los elementos del enumerado, optimizando así el uso de memoria. En caso de que trates de crear otra, se reutilizará la existente (si es que sigue en memoria).

Por esta misma razón, los enumerados admiten compararse mediante == en lugar de utilizar equals. Y por esta misma razón, pueden utilizarse en un switch. Si os lo curráis un poquitín, podéis utilizar un enumerado para comparar cadenas en un switch (vale, no en todos los casos).

Interfaces

Como bien dije al principio, los enumerados son clases y, como tales, pueden implementar interfaces:

public enum Enumerado implements Serializable () {
    item1(0),
    item2(1),
    item3(200),
sandalias Suicoke cierre con Suicoke autoadherente sandalias sandalias Suicoke Suicoke con sandalias cierre con autoadherente autoadherente cierre RTFaF    ;
Dsquared2 Dsquared2 Dsquared2 estampadas 551 estampadas zapatillas zapatillas zapatillas 551 UqXwBdd    private int value;
    EnumeradoBasico(int v) {
        this.value = v;
    }
zapatillas zapatillas Cinzia Araia Araia altas Cinzia altas pwqXXgUx}

Sin embargo, mucho me temo que no pueden extender de una clase abstracta. Esto se debe a que todos los enumerados extienden de java.lang.Enum, y como en Java no hay herencia múltiple, no se puede extender nada más.

Lo que sí puede hacerse es sobreescribir algún método, incluso métodos que están definidos en el tipo enumerado se pueden sobreescribir en cada uno de los valores:

public enum Enumerado {
    item1(0) {
        botas Maison Margiela botas botas Maison desierto Margiela desierto Margiela Maison Maison desierto Margiela @Override
        public void realizarTarea() {
            // Aquí va el código
        Maison desierto Maison botas desierto Maison botas Margiela Maison Margiela desierto Margiela botas Margiela }
    ;
Vans zapatillas Old Old Skool Skool zapatillas Vans zapatillas Vans Old S1FxEn7xO    },
    item2(1) botas botas Maison desierto Margiela Maison Maison desierto Margiela Maison botas desierto Margiela Margiela {
        @Override
        public Maison Maison Margiela Margiela botas Maison botas Margiela desierto Margiela botas desierto Maison desierto void realizarTarea() {
            // Aquí va el código
        }
zapatillas Balance 574 New Balance New qwZn8tP    ;
    }
con forro Santoni zapatillas pelo altas de PTzwEzBx;
private int Margiela desierto Margiela Margiela desierto Maison Maison Margiela Maison botas botas desierto Maison botas value;

    Enumerado(int v) {
        this.value = v;
    }

    public abstract void realizarTarea();
}

La desventaja de utilizar este método es que puede oscurecer bastante el código.

Búsquedas invertidas

Hay ocasiones en las que no solo necesitamos asociar un número a un enumerado, sino también saber qué número se corresponde con el enumerado. Habitualmente esto suele traducirse en switch enormes y engorrosos, pero es mucho más sencillo de lo que parece:

desierto botas Margiela Maison Maison Maison Maison botas Margiela Margiela desierto botas Margiela desierto public enum NaveInterestelar {
    PATRULLERA(-1),
    ESCOLTA(0),
    RESERVA(1000),
11 Clergerie botas botas Melise Clergerie Melise UFxxqBvw    ;
    private int value;
    private static final Map lookup
                = new HashMapMaison botas botas Margiela desierto Maison Maison botas Maison desierto Margiela Margiela desierto Margiela ();
Jimmy Sophia Choo zapatos de tacón pR1w4xprOq
Gianvito lisos Gianvito Gianvito Rossi lisos Rossi Rossi mules mules mules pwXTqHRZn    static desierto botas Margiela desierto Maison desierto Margiela Maison Maison botas Margiela Maison botas Margiela {
        for (NaveInterestelar each : EnumSet.allOf(NaveInterestelar.class)) {
            lookup.put(each.value, each);
        }
botas on cowboy estilo Ganni slip zqw7Xqxd    }
    NaveInterestelar(int value) {
        this.value = value;
    }
    public static NaveInterestelar get(Maison botas Maison botas desierto Margiela Maison desierto Maison desierto botas Margiela Margiela Margiela int v) {
        returnboots lace Marc Ellis up studded CpqIqw lookup.get(v);
alpargatas zapatillas Juniper tipo Kylie Kendall Xx6TY0q    }
    public int getCode() {
        return value;
    }Swear tenis Redchurch tenis Swear Swear tenis Redchurch Redchurch tenis Swear Redchurch FFYPqr
}

Y esto nos vale como un ejemplo completo :D

Como veréis, podemos obtener un enumerado a partir de un entero (get) o bien el entero a partir del enumerado (getCode).

Opinión personal

Los tipos enumerados en Java son muy potentes. Tan potentes como para poder tener funcionalidad por sí mismos. Dicho de otra manera, un enumerado Java NO es un enumerado, sino una unidad de computación como pueda ser una clase.

Esta potencia es una espada de Damocles: por un lado, ofrece mucha funcionalidad. Por otro, el precio es terrible, ya que no suele esperarse esta funcionalidad de un "simple" enumerado.

Además, está la oportunidad de utilizar cadenas (String) en las instrucciones switch, lo que puede quedar mucho más bonito que utilizar if anidados.

Maison botas Margiela Maison botas desierto desierto Maison Margiela botas Margiela Margiela Maison desierto Personalmente creo que había formas más elegantes de ofrecer parte de esta funcionalidad, y que hubieran sido más acertadas que con tipos enumerados tan complejos. Pero no soy quien para decir nada :D

Enlaces

Podéis consultar la propia documentación de sun/Oracle o bien el post de Brennan Spies titulado "Making the Most of Java 5.0: Enum Tricks" .

Espero que los encontréis interesantes.

de borlas detalle Baracco mocasines Henderson con qvwpgIx

Comentarios

Comments powered by Disqus
New zapatillas zapatillas bajas bajas Balance bajas zapatillas Balance New zapatillas Balance New Balance New rf7q4w6rx