Aprender y usar la enumeración de Java

Recientemente, al mirar el código de otras personas, a menudo veo lugares donde se usan enumeraciones, pero cuando escribo yo mismo, también he pensado en usar enumeraciones, pero no hay un concepto claro de cuándo usar enumeraciones y constantes. Es vago. Así que clasifiqué especialmente el conocimiento sobre enumeración para su aprendizaje y uso.

1. Qué tipo de enumeración de Java

Respuesta por mi razón de ser: La enumeración es un conjunto definido por nosotros mismos. Por ejemplo, el conjunto A = {1, 2, 3} aprendido en matemáticas. Cuando queremos usar el conjunto A, solo podemos usar el conjunto Los tres elementos 1 , 2 y 3 en A no se pueden usar si no son los elementos en A.
De manera similar, una enumeración es similar a esta colección. Cuando definimos un tipo de enumeración, declaramos que hay varios elementos en él. Cuando usamos esta enumeración, solo podemos usar los elementos que tiene. No podemos usar el elemento, y el El sistema informará de un error.
Otra característica de la enumeración es que puede representar valores, por ejemplo, el valor del primer elemento definido es 0, y cada elemento de enumeración comienza desde 0 y aumenta uno a uno. En este momento, este valor también se representa a sí mismo, lo que equivale a dos nombres para cada elemento.

2. En qué circunstancias se deben utilizar los tipos enumerados

2.1 Cuándo usar clases de enumeración
  A veces los objetos de una clase son limitados y fijos, en este caso es más conveniente para nosotros usar clases de enumeración
  
2.2 ¿Por qué no usar constantes estáticas en lugar de clases de enumeración?

   public static final int SEASON_SPRING = 1;
  public static final int SEASON_SUMMER = 2;
  public static final int SEASON_FALL = 3;
  public static final int SEASON_WINTER = 4;

 Las clases de enumeración son más intuitivas y seguras para los tipos. El uso de constantes tiene las siguientes desventajas:
  1. Tipos inseguros. Si se requiere pasar el parámetro de temporada en un método, si se usa una constante, el parámetro formal es de tipo int. Los desarrolladores pueden pasar cualquier tipo de valor de tipo int, pero si es un tipo de enumeración, solo puede pasar a la clase de enumeración Objetos incluidos.
  2. No hay espacio de nombres. Los desarrolladores deben comenzar con SEASON_ al nombrarlos, de modo que cuando otro desarrollador mire este código, sepa que estas cuatro constantes representan las estaciones.

2.3 Lugares de uso común:
Queremos obtener un valor de otra función, pero este valor solo puede estar en un rango, en este momento podemos usar la enumeración para definir este rango. Limite el valor que puede pasar otra función, solo los elementos del tipo de enumeración

3. Uso simple y puntos de atención de la clase de enumeración.

package enumcase;
  public enum SeasonEnum {
  SPRING,SUMMER,FALL,WINTER;
  }

Entonces puedes usarlo así: SeasonEnum currentSeason = SeasonEnum .SUMMER

Nota:
(1)
Enum tiene el mismo estado que la clase y la interfaz. (2) La clase de enumeración definida por enum hereda java.lang.Enum por defecto, no la clase Object. Las clases de enumeración pueden implementar una o más interfaces.
(3) Todas las instancias de la clase de enumeración deben mostrarse en la primera línea, sin usar la nueva palabra clave y sin llamar explícitamente al constructor. Agregue automáticamente decoración final estática pública.
(4) Las clases de enumeración no abstractas que utilizan definiciones de enumeración están finalizadas de forma predeterminada y no se pueden heredar.
(5) El constructor de la clase de enumeración solo puede ser privado.

3.1 Las propiedades y los métodos también se pueden definir en la clase de enumeración, pero son estáticos y no estáticos.

package enumcase;
  public enum SeasonEnum {
      SPRING("春天"),
      SUMMER("夏天"),
      FALL("秋天"),
      WINTER("冬天");
  
  private final String name;
  
  private SeasonEnum(String name)
  {
     this.name = name;
  }
  public String getName() {
    return name;
  }
 }

De hecho, cuando la instancia de la clase de enumeración se escribe en la primera línea, se llama al constructor de forma predeterminada, por lo que los parámetros deben pasarse aquí, porque no hay una declaración explícita del constructor sin parámetros, solo se puede llamar al constructor con parámetros .
  El constructor debe definirse como privado para que dichos objetos no se puedan declarar en otro lugar. Las clases de enumeración generalmente deben diseñarse como clases inmutables y su campo no debe cambiarse, lo que será más seguro y el código más conciso. Entonces modificamos el campo con final privado.

3.2 clase de enumeración atravesando el
tipo enumerado proporciona dos métodos estáticos útiles: value () y valueOf () podemos usarlos fácilmente,
por ejemplo:

 for(SeasonEnum s : SeasonEnum .values())
     System.out.println(s);

3.3 La expresión en la declaración de cambio puede ser un valor de enumeración

package enumcase;
public class SeasonTest {
    
    
 public void judge(SeasonEnum s){
  switch(s){
      case SPRING:
        System.out.println("春天适合踏青。");
      break;
      case SUMMER:
        System.out.println("夏天要去游泳啦。");
      break;
      case FALL:
        System.out.println("秋天一定要去旅游哦。");
      break;
      case WINTER:
        System.out.println("冬天要是下雪就好啦。");
      break;
  }
 }
 
public static void main(String[] args) {
  SeasonEnum s = SeasonEnum.SPRING;
  SeasonTest test = new SeasonTest();
  test.judge(s);
  }
}

3.4 La definición de un tipo de enumeración es esencialmente para definir una categoría, pero el compilador completa muchos detalles por nosotros, por lo que, hasta cierto punto, la función de la palabra clave enum es como clase o interfaz.

3.5 La clase de enumeración definida por enum hereda java.lang.Enum por defecto en lugar de heredar la clase Object

Cuando usamos "enum" para definir un tipo de enumeración, de hecho, el tipo que definimos hereda del tipo java.lang.Enum, y los miembros de la enumeración son en realidad una instancia (Instancia) del tipo de enumeración que definimos. preestablecidos para ser finales, por lo que no podemos cambiarlos. También son miembros estáticos, por lo que podemos usarlos directamente a través del nombre del tipo. Por supuesto, lo más importante es que todos son públicos. Es decir, cada tipo de enumeración que definimos hereda de la clase java.lang.Enum, y cada miembro de la enumeración es público estático final por defecto.
Los miembros de cada enumeración son en realidad una instancia del tipo de enumeración que definimos. En otras palabras, cuando se define un tipo de enumeración, se puede determinar en el momento de la compilación cuántas instancias del tipo de enumeración son y cuáles son. Durante el tiempo de ejecución, ya no podemos usar la enumeración para crear nuevas instancias, estas instancias se han determinado completamente durante la compilación. Entonces, en: SeasonEnum currentSeason = SeasonEnum .SUMMER, no hay un nuevo SeasonEnum (). Asignación directa

3.6 Verificar permisos

Por ejemplo, el permiso de un gerente, empleado o cliente para usar una herramienta generalmente se maneja mediante enumeración porque se puede usar para controlar los parámetros pasados ​​para el juicio, solo puede ser el número del tipo de enumeración, limitando así los parámetros pasados.

package Enum;

public class AccessControl {
    
    
    public static boolean checkRight(AccessRight access){
        if(access == AccessRight.MANAGER){
            return true;
        }
        else if(access == AccessRight.DEPARMENT){
           return false;
        }else {
          return false;
        }

    public static void main(String[] args) {
        System.out.println(checkRight(AccessRight.DEPARMENT));
    }
}

enum AccessRight{
MANAGER,DEPARMENT,EMPLOYEE;

De esta manera, solo se pueden pasar parámetros de tipo AccessRight y otros parámetros son ilegales.

3.7 Convertir tipo de cadena en tipo de enumeración

static <T extends Enum<T>> T 
valueOf(Class<T> enumType, String name) 

Devuelve la constante de enumeración del tipo de enumeración especificado con el nombre especificado.

Puede usar AccessRight access = AccessRight.valueOf ("MANAGER"); // Siempre que haya un elemento de MANAGER en AccessRight, puede devolver este elemento, es decir, convertir el tipo String al tipo AccessRight

4. Sitio web de referencia

Hasta ahora, he aprendido mucho de la enumeración y resolví un poco algunas cosas en Internet. A continuación, se muestran algunos sitios web que aprendí

https://www.douban.com/note/512891241/
http://blog.sina.com.cn/s/blog_4adc4b090101dtxp.html
http://blog.sina.com.cn/s/blog_697b968901013ih1.html

Supongo que te gusta

Origin blog.csdn.net/android_freshman/article/details/52223542
Recomendado
Clasificación