¿Cómo definir el tipo de enumeración en Java?
1. No puede tener un constructor público, lo que garantiza que el código del cliente no pueda crear nuevas instancias de enum.
2. Todos los valores de enumeración son públicos, estáticos y finales. Tenga en cuenta que esto sólo funciona para valores de enumeración. Podemos definir cualquier otro tipo de variables que no sean de enumeración tal como definimos variables en una clase normal, y estas variables pueden usar cualquier modificador que desee.
3. De forma predeterminada, enum implementa la interfaz java.lang.Comparable.
4.enum anula el método toString, por lo que si llamamos a Color. Blue.toString(), por defecto devolverá la cadena "Azul".
5.enum proporciona el método valueOf, que corresponde al método toString. Llamar a valueOf ("Azul") devolverá Color. Azul, por lo que debemos prestar atención a esto al reescribir el método toString nosotros mismos, y también debemos reescribir el método valueOf en consecuencia.
6.enum también proporciona el método de valores, lo que le permite iterar fácilmente a través de todos los valores de enumeración.
7.enum también tiene un método ordinal, que devuelve el orden de los valores de enumeración en la clase de enumeración, que depende del orden en que se declaran los valores de enumeración, donde Color. Red.ordinal() devuelve 0.
Ahora que entendemos estas características básicas, echemos un vistazo a cómo usarlas.
1. Recorre todos los valores de enumeración. Después de comprender el método de los valores, podemos usar hábilmente el bucle ForEach para recorrer los valores de enumeración.
for (Color c: Color.values())
System.out.println("Buscar valor: " c); list Defina métodos y variables en el ejemplo. Por ejemplo, podemos agregar un método a Color que devuelva un color aleatorio.
Colores de enumeración pública {
Rojo,
Verde,
Azul
/*< /p; >
*Defina una variable para representar el número de valores de enumeración.
*(Estoy un poco sorprendido de que Sun no proporcione directamente un método de tamaño para la enumeración).
*/
Número int estático privado = Color.values(). Longitud;
/**
*Devuelve un valor de enumeración aleatorio.
@Devuelve un valor de enumeración aleatorio.
*/
Color estático público getRandomColor(){
long random = sistema hora actual número de milisegundos;
Cambiar. ((int) aleatorio){
Caso 0:
Devuelve color. Rojo;
Caso 1:
Devuelve color. Verde;
Caso 2:
Devuelve el color. Azul;
Valor predeterminado: color de retorno. Rojo;
}
}
}
Se puede ver que la definición de variables y métodos en los tipos de enumeración es diferente a la de ordinario No hay diferencia entre métodos y variables definidas en una clase. Lo único a tener en cuenta es que las definiciones de variables y métodos deben colocarse después de todas las definiciones de valores de enumeración; de lo contrario, el compilador dará un error.
3. Reescribe el tostring y el valor del método.
Ya sabemos que enum proporciona toString, valueOf y otros métodos. Muchas veces necesitamos anular el método toString predeterminado, entonces, ¿para qué usamos enum? De hecho, esto no es diferente de anular el método toString de una clase normal.
….
Cadena pública toString(){
Cambiar(esto){
Concha roja:
Devuelve "Color. Rojo";
Cáscara verde:
Devuelve "Color. Verde";
Cáscara azul:
Devuelve "Color.Blue";
Valor predeterminado:
Devuelve "Color desconocido";
}
} p>
….
En este momento podemos ver que el color impreso por el código transversal anterior es
color. Color Rojo
. Verde (apellido); color verde
. Azul
en lugar de
rojo
Verde (apellido verde
azul);
Puedes ver que toString está realmente sobrecargado. En términos generales, al anular toString, también debemos anular el método valueOf para que sean coherentes.
4. Usar constructores
Aunque enum no puede tener un constructor público, aún podemos definir un constructor privado para usar dentro de la enumeración. Tomemos como ejemplo el color.
Colores de enumeración pública {
Rojo ("Esto es rojo"),
Verde ("Esto es verde"),
blue("Esto es azul");
desc de cadena privada;
color(desc de cadena){
this .
}
Cadena pública getDesc(){
Devolver this.desc
}
}
Aquí proporcionamos una información de descripción para cada color y luego definimos un constructor para recibir esta información de descripción.
Tenga en cuenta que el constructor aquí no puede ser público ni protegido, para garantizar que el constructor solo se pueda usar internamente y que el código del cliente no pueda crear instancias de valores de enumeración. Esto también es completamente razonable, porque sabemos que los valores de enumeración son constantes finales estáticas públicas.
5. Implementar interfaces específicas
Ya sabemos que enum puede definir variables y métodos. Su implementación de una interfaz es la misma que la de una clase normal, por lo que no daremos. un ejemplo aquí.
6. Defina sus propios métodos para los valores de enumeración.
Como vimos anteriormente, podemos definir algunos métodos para enum. De hecho, incluso podemos definir métodos para cada valor de enumeración. De esta manera, nuestro ejemplo anterior de reescritura en String se puede reescribir así.
Enumeración pública Color{
Rojo{
Cadena pública toString(){
Devuelve "Color.Red";
}
},
Verde {
Cadena pública toString(){
Devuelve "Color. Verde";
}
},
Azul{
Cadena pública toString(){
devuelve "color. blue";
}
};
}
Lógicamente este es mejor que el original. El método "global" toString es más limpio. .
En general, enum, como tipo recién definido, espera ayudar a los programadores a escribir código más simple y fácil de entender.
La gente piensa que generalmente no es necesario utilizar demasiado algunas características avanzadas de enum, de lo contrario violará la intención original de ser fácil de entender.