Prefacio
En nuestra programación diaria, a menudo hay tales "conjuntos de datos", cuyos valores son estables en el programa, y los elementos en los "conjuntos de datos" son limitados. Por ejemplo, siete elementos de datos de lunes a domingo forman el "conjunto de datos" de una semana, y cuatro elementos de datos de primavera, verano, otoño e invierno forman un "conjunto de datos" de las cuatro estaciones. ¿Cómo usar mejor estos "conjuntos de datos" en Java? Por lo tanto, la enumeración es útil
La enumeración es en realidad un tipo, similar a Int y Char, lo que significa que restringe la entrada al definir variables. Solo puede asignar los valores especificados en ENUM.
Implementación de enum
JDK5 proporciona la implementación de los tipos de Java Enum, que es más azúcar sintáctico que un nuevo tipo.
Temporada pública en enum {Primavera, verano, otoño, invierno}Echemos un vistazo a cómo se implementa este código a través de la herramienta de descompilación. El código descompilado es el siguiente:
Public Final Class Season extiende Enum {public static temporada [] valores () {return (temporada []) $ valores.clone (); } Value de temporada estática pública (String S) {return (temporada) enum.valueOf (temporada, s); } temporada privada (cadena s, int i) {super (s, i); } primavera pública de temporada final estática; Público verano estática final de temporada; Pública temporada final estática otoño; Público estática final de la última temporada final Invierno; Temporada final estática privada $ valores []; static {Spring = New Season ("Spring", 0); Verano = nueva temporada ("verano", 1); Otoño = nueva temporada ("otoño", 2); Invierno = nueva temporada ("invierno", 3); $ Valores = (nueva temporada [] {primavera, verano, otoño, invierno}); }} Al descompilar el código, puede encontrar:
1. Season es una clase ordinaria que hereda de Enum y se modifica a través de final para evitar la herencia.
2. SPRING , SUMMER , AUTUMN e WINTER en el enum son instancias estáticas de Season y se inicializan en el método del constructor de clases <clinit> .
3. values() devuelve una copia de la variable privada $VALUES[] $VALUES[] , que también se inicializa en <clinit> .
Cómo usar enum
1. Modo singleton
Ya sabemos que el constructor de clases <clinit> solo puede ser ejecutado por un hilo durante la etapa de inicialización de la carga de clase, por lo que cada instancia de la enumeración tiene y solo una copia en el montón de Java. Esta característica facilita la enumeración implementar el patrón Singleton. Así es exactamente cómo el autor de Java, Josh Bloch, aboga por el uso de la implementación de patrones de singleton.
public enum singleton {instancia;} 2. Use en el interruptor
3. Campos y métodos personalizados
Además de los campos y métodos predeterminados en Enums, puede personalizar para la lógica de negocios.
public enum enumTest {plus (" +") {@Override public int bind (int arg1, int arg2) {return arg1 + arg2; }}, Sub (" -") {@Override public int bind (int arg1, int arg2) {return arg1 - arg2; }}; operación de cadena final; EnumTest (operación de cadena) {this.operation = operation; } abstract int bind (int arg1, int arg2);}4. Implementar la interfaz
Operación de interfaz {int Operation (int arg1, int arg2);} public enum enumtest implementa operación {plus (" +") {@Override int Operation (int arg1, int arg2) {return arg1 + arg2; }}, Sub (" -") {@Override public int Operation (int arg1, int arg2) {return arg1 - arg2; }}; operación de cadena final; EnumTest (operación de cadena) {this.operation = operation; }} En aplicaciones prácticas, "+" y "-" se pueden usar como claves, más y value , y prevímenes en hashmap en hashMap . El método de uso específico es el siguiente:
Operación operación = hashmap.get ("+"); int resultado = operación.bind (1, 2);Resumir
Lo anterior se trata de los tipos de enumeros en Java. Espero que a través de la introducción de este artículo a Enums en Java, pueda ser útil para todos. Si tiene alguna pregunta, deje un mensaje para comunicarse.