Red de conocimiento informático - Aprendizaje de programación - tipo de enumeración java

tipo de enumeración java

El uso de enumeraciones en los tipos de enumeración de Java

Recientemente, estaba discutiendo un problema con un colega. De repente, el colega mencionó por qué definimos el tipo de enumeración de valor constante en Java en lugar de enmu, pero usamos el público. tipo estático final para definirlo? Solíamos definirlo de esta manera y rara vez usamos definiciones de enumeración, por lo que nunca le prestamos atención ante los problemas que aparecían de repente y no entendíamos muy bien por qué existía tal definición. Como no lo entiendo, me tomaré el tiempo para estudiarlo.

El tipo de enumeración en Java se define mediante la palabra clave enumeración. La enumeración es un nuevo tipo en jdk1.5. Todos los tipos de enumeración heredan del tipo de enumeración. Para comprender el tipo de enumeración, se recomienda que primero abra la clase jdk Enum y lea brevemente. Esta clase define muchos métodos protegidos, como constructores. Si desea utilizar estos métodos, podemos definir el tipo de enumeración en la clase actual. . Cada tipo de enumeración tiene su propio nombre y orden. Cuando generamos un tipo de enumeración, se ingresará el nombre del tipo de enumeración. Puede consultar el siguiente ejemplo.

I. Generalmente definimos métodos constantes

Usualmente usamos la definición del método estático final público. El código es el siguiente, usando 1 para representar la luz roja y 3 para representar la luz verde. , y 2 para representar la luz amarilla.

paquete com.csdn.myEnum;

public class Light {

/*RED */

public final static int RED = 1;

/* VERDE */

public final static int VERDE =3

/* Luz amarilla */

public final static int YELLOW =2;

}

Dos: métodos para definir constantes de tipo de enumeración

La forma sencilla de definir tipos de enumeración es la siguiente, no Parece que no tiene método que defina cada valor del tipo de enumeración. Por ejemplo, nuestro código para definir luces rojas, verdes y amarillas podría verse así:

public enum Light {

ROJO, VERDE, AMARILLO

; }

Solo podemos representar luces rojas, verdes y amarillas, pero no podemos representar valores específicos. No te preocupes, dado que el tipo enum proporciona un constructor, podemos lograrlo usando ese constructor y sobrecargando el método toString. Primero, agregamos un método constructor para el tipo de enumeración Light, luego pasamos el valor de cada tipo de enumeración al parámetro correspondiente a través del constructor y anulamos el método toString, en el que pasamos el retorno de los parámetros del constructor, el código convertido es como sigue:

public enum Light {

// Pasar parámetros a través del constructor

// Usa el constructor para pasar el tipo de enumeración Pasar parámetros.

ROJO (1), VERDE (3), AMARILLO (2);

// Definir variables privadas

private int nCode

// Constructor, el tipo de enumeración solo puede ser privado

private Light( int _nCode) {

this .nCode = _nCode;

}

@Override

public String toString() {

return String.valueOf ( this . nCode

}

}

3. Código de muestra completo

El código de demostración completo del tipo de enumeración es el siguiente:

paquete com.csdn.myEnum;

importar java.util.EnumMap;

importar java.util.EnumSet;

public class LightTest {

// 1. Definir el tipo de enumeración

public enum Light {

// Usa el constructor para pasar parámetros

ROJO (1), VERDE (3), AMARILLO (2); p>

// Definir variables privadas

private int nCode;

// Constructor, el tipo de enumeración solo puede ser privado

private Light ( int _nCode) {

this .nCode = _nCode;

}

@Override

public String toString() {

p>

return String.valueOf ( this . nCode

}

}

* @param args

);

* /

public static void main(String[] args ) {

// 1. Recorrer los tipos de enumeración

System.println( "Demuestra el tipo de enumeración transversal.

....." );

testTraversalEnum ();

// 2. Demostrar el uso de objetos EnumMap

System. out .println( " Demostración El uso de objetos EnmuMap y recorrido..." );

testEnumMap ();

// 3. Demostrar el uso de objetos EnmuSet

Sistema .out .println( "Demuestra el uso de objetos y recorridos de EnmuSet..."

testEnumSet (

}

/**<); /p>

* Demuestra el recorrido de los tipos de enumeración

*/

private static void testTraversalEnum() {

Light[] allLight = Light.values ();

for (Light aLight : allLight) {

System.system. out .println( "Nombre de la luz actual: " aLight.name());

System.out .println( "Luz actual: " aLight

}

}

/**

* Demuestra el uso de EnumMap. EnumMap es similar a HashMap, excepto que la clave es una enumeración

*/

private static void testEnumMap() {

// 1 Demuestra la definición de un objeto EnumMap. Su constructor necesita pasar un parámetro, que es el tipo de clase de la clave de forma predeterminada.

}

}/

* Demuestra el uso de EnumMap.

Tipo de clase de palabra clave

EnumMaplt; Light, Stringgt; currEnumMap = new EnumMaplt; Light, Stringgt (

Light.GREEN, " Green Light "); currEnumMap.put(Light. YELLOW , " Yellow Light " );

// 2. Recorrer objetos

for (Light aLight : Light.Value ()) {

p>

2.value ()) {

System. out .println( "[key=" aLight.name() ", value="

currEnumMap.get (aLight) "]" );

}

p> }

/**

* Demuestra cómo usar EnumSet, que es una clase abstracta utilizada para obtener tipos de lt;BR/gt;

* Puedes usar el método allOf

*/

private static void testEnumSet ( ) {

EnumSetlt; currEnumSet = EnumSet.allOf (Light. class );

for (Light aLightSetElement : currEnumSet) {

System. println( "Los datos en el EnumSet actual son: " aLightSetElement

}

}

Ejecute de la siguiente manera:

Demostrar enumeración Tipo transversal...

Nombre de la luz actual: rojo

Número de luz actual: 0

Luz actual: 1

Actual nombre de la luz: Verde

Número de luz actual: 1

Luz actual: 3

Nombre de la luz actual:

Número de luz actual: 2

Número de luz actual: 2

Número de luz actual: 2

Número de luz actual: 2

Número de luz actual: 2< / p>

Número de luz actual: 2

Número de luz actual: 2

Demostración del uso y recorrido de objetos EnmuMap. ....

[clave=ROJO, valor=rojo]

[clave=VERDE, valor=verde]

[clave=AMARILLO, valor= Amarillo]

Demuestre el uso y recorrido de los objetos EnmuSet.....

Los datos actuales en EnumSet: 1

Los datos actuales en EnumSet: 3

Datos actuales en EnumSet: 2

4. La diferencia entre métodos convencionales y métodos de enumeración

El siguiente contenido puede ser un poco aburrido, pero definitivamente lo es. vale la pena leer

p>

1.

Estado de clase pública {

int final estático público ON = 1;

Int final estático público OFF=

}

¿Cuál es el problema con esto? ¡Todo el mundo lo ha estado usando así durante mucho tiempo y no hay ningún problema!

¿Qué tiene de malo?

En primer lugar, no es seguro para escribir. Debes asegurarte de que sea un int

En segundo lugar, debes asegurarte de que esté en el rango de 0 y 1

Finalmente, cuando lo imprimas, muchas veces solo ve 1 y 0.

Sin embargo, las personas que no leen el código no sabrán lo que quieres hacer, desecha todas tus antiguas constantes finales estáticas públicas

2. Puedes crear una enumeración. Toma la clase y trátala como una clase normal. Pero no puede heredar de ninguna otra clase. (Java es herencia única, ha heredado Enum),

Puedes agregar otros métodos para anular sus propios métodos

3. Los parámetros de switch() ahora se pueden combinar con enum usando

4. El método valores() es un método estático que el compilador inserta en la definición de enumeración, por lo que cuando realiza la transición de una instancia de enumeración a la clase principal Enum, no es necesario crear una nueva clase. Solución Hay un método getEnumConstants() en Class, por lo que incluso si no hay un método de valores() en la interfaz Enum, aún podemos obtener todas las instancias de enumeración a través del objeto Class

5. ¿Es posible heredar subclases de una enumeración, por lo que si necesita extender los elementos de una enumeración en una interfaz, cree una enumeración que implemente esa interfaz? Si necesita ampliar los elementos de una enumeración, puede agrupar los elementos dentro de la interfaz creando una enumeración que implemente la interfaz. Para agrupar elementos en una enumeración, haga lo siguiente

6. Utilice EnumSet en lugar de banderas. Una enumeración requiere que sus miembros sean únicos, pero los elementos no se pueden eliminar ni agregar a la enumeración.

7. Las claves de EnumMap son enumeraciones y los valores son cualquier otro objeto.

8. enum permite a los programadores escribir métodos para instancias de enumeración. Por lo tanto, cada instancia de enumeración puede tener su propio comportamiento diferente.

9. Utilizar cadena de responsabilidad enumerada. Esto está relacionado con el patrón de cadena de responsabilidad en los patrones de diseño. Resuelve problemas de muchas maneras diferentes. Luego conéctelos. Cuando se recibe una solicitud, se recorre la cadena de responsabilidad hasta que una solución en la cadena de responsabilidad pueda manejar la solicitud.

10. Máquina de estados mediante enumeraciones

11. Distribución multiplexada mediante enumeraciones

12.