NingG +

Java 剖析:浅谈 Enum

典型应用

枚举类是 java.lang.Enum 类的子类,下述示例代码中:

示例代码如下:

public enum Light {
   // 利用构造函数传参
   RED(1, "红色"),
   GREEN(2, "绿色"),
   YELLOW(4, "黄色");
   
   // 定义私有变量
   private int value;
   private String desc;
   
   // 构造函数,枚举类型只能为私有,默认为私有
   Light( int value, String desc) {
       this.value = value;
       this.desc = desc;
   }
   
   // Getter and Setter 
   ... ...       
   
   
}

不怕再啰嗦一次:

为什么要用 enum

实际上,枚举类的实例是静态常量,那为什么不直接使用静态常量呢?在没有 enum之前,静态常量的写法如下:

// 方法 1:静态常量
public class WeekDay {
    public static final int MONDAY = 1;
    public static final int TUESDAY = 2;
    public static final int WENSDAY = 3;
    public static final int THURSDAY = 4;
    public static final int FRIDAY = 5;
}

使用枚举类时:

// 方法 2:枚举类
// enum 类的等价实现方式,后文会单独写一个 enum
public class WeekDay {
     public static final WeekDay MONDAY = new WeekDay(1);
     public static final WeekDay TUESDAY = new WeekDay(2);
     public static final WeekDay WENSDAY = new WeekDay(3);
     public static final WeekDay THURSDAY = new WeekDay(4);
     public static final WeekDay FRIDAY = new WeekDay(5);
     
     private int value;
     
     private WeekDay(int i){
               this.value = i;
     }
     
     public int getValue(){
               return value;
     }
     
}

方法 1,使用静态常量,存在几个问题:

相比来说,方法 2 ,使用静态常量类(枚举类),好处:

下面写一个标准的枚举类

public enum WeekDayEnum {
	MONDAY(1),
	TUSDAY(2),
	WENSDAY(3),
	THURSDAY(4),
	FRIDAY(5);
	
	private int value;
	
	WeekDayEnum(int value){
		this.value = value;
	}
	
	public int getValue(){
		return this.value;
	}
	
}

NOTE:实际上,枚举类继承自java.lang.Enum抽象类。

应用场景

枚举的7中常用方式,主要有:

特别写法

枚举类,每个静态常量实例,都有一个序号(从 0 开始),常见的写法:

public enum WeekDayEnum {
	MONDAY("周一"),
	TUSDAY("周二"),
	WENSDAY("周三"),
	THURSDAY("周四"),
	FRIDAY("周五");
	
	private int ordinal;
	
	WeekDayEnum(){
		this.ordinal = this.ordinal();
	}
	
	public int getOrdinal(){
		return this.ordinal;
	}
	
}

避免错误使用 Enum

不过在使用 Enum 时候有几个地方需要注意:

参考来源

Top