Meditaciones metafisicas sobre el ENUM

Iniciado por XafiloX, 20 Octubre 2010, 19:07 PM

0 Miembros y 2 Visitantes están viendo este tema.

XafiloX

Hoy por primera vez he utilizado el ENUM en JAVA y la verdad, me ha asaltado una pequeña duda...El enum...¿qué es? ¿Se puede considerar una clase? Tiene una sintaxis muy extraña a la forma de declararlo que no corresponde del todo a la de una clase, sin embargo, si que puede tener constructor...

Franki

El Enum realmente es una clase y sirve para almacenar valores relacionados y operar sobre ellos.

Antes de la existencia del enum se solía realizar una clase estática con un conjunto de constantes estáticas. Ahora simplmente creas una nueva enumeración que puedes utilizar.

XafiloX

Pero si es una clase, cómo es que puede hacer cosas como estas:
Código (java) [Seleccionar]
enum lugares2{
      ORIGEN(0), CUADRANTE1(1), CUADRANTE2(2), CUADRANTE3(3), CUADRANTE4(4), SEMIEJEXPOSITIVO(5),
SEMIEJEXNEGATIVO(6), SEMIEJEYPOSITIVO(7), SEMIEJEYNEGATIVO(8);
}

Eso en una clase normal no se puede hacer, ¿no? Además, ¿no debería empezar su nombre por class?  :-\

Franki

Te explico, el enum tiene una sintaxis particular dentro del lenguaje Java, pero internamente está representado por la clase Enum:

http://download.oracle.com/javase/6/docs/api/java/lang/Enum.html

Un ejemplo sencillo, ímaginate que necesitas controlar que un botón esté activo o inactivo y según su estado ejecutes un bloque de instrucción o otro.

Actualmente con el enum harías algo así:

enum Estado {Activo, Inactivo};

Y ya dentro de tu clase, en el método que comparara el estado podrías hacer algo así:

if(boton.getEstado() == Estado.Activo )
//blabla

Antes de la existencia del Enum tenías que crearte una clase aposta con ese conjunto de constantes estáticas:

class Estado{
static final int Activo == 1;
static final int Inactivo == 0;
}

Este es un ejemplo muy chorra, pero las enumeraciones pueden ser muy potentes, pues definirles un constructor y métodos internos.


XafiloX

OK, muchisimas gracias por la explicacion  :D