Skip to content

枚举类型是Java 5中新增的,它是一种特殊的数据类型,一般用来表示常量

基本语法

java
修饰符 enum 枚举类型名称 {
    枚举值1,枚举值2,...,枚举值n;
}

枚举值一般都是大写,只有枚举值时,最后的分号可以省略不写

枚举值默认都被 public static final 修饰

每个枚举值都可以看作是 枚举类的实例,当使用枚举值时,直接使用枚举名称调用即可

创建枚举

java
public enum Week {
	MONDAY, 
	TUESDAY, 
	WEDNESDAY,
    THURSDAY, 
    FRIDAY, 
    SATURDAY, 
    SUNDAY;
}

枚举中一些常用方法

方法名称描述
values()以数组形式返回枚举类型的所有成员
valueOf()将普通字符串转换为枚举实例
compareTo()比较两个枚举成员在定义时的顺序
ordinal()获取枚举成员的索引位置

调用

java
public class App {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Week w = Week.FRIDAY;
        // 返回枚举值的常量索引
		System.out.println(w.ordinal());
        // 返回枚举中所有值
		Week[] values = Week.values();
		for(Week week : values) {
			System.out.println(week);
		}
        
		switch(w) {
		case MONDAY:
		case TUESDAY:
		case WEDNESDAY:
		case THURSDAY: 
		case FRIDAY:
			System.out.println("上班");
			break;
		case SATURDAY:
		case SUNDAY:
			System.out.println("休息");
			break;
		}
	}

}

高级用法

枚举类中可以用自己的变量、方法和构造方法,构造方法只能使用 private 访问修饰符

java
public enum OrderStatus {

	ORDER_NO_PAY(1, "未支付"),
	ORDER_PAY_FINISH(2, "已支付"),
	ORDER_CANCEL(3, "已取消"),
	ORDER_FINISHNO_PAY(4, "已完成");
	
	
	private int key;
	private String desc;
	
	public int getKey() {
		return key;
	}

	public void setKey(int key) {
		this.key = key;
	}

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	private OrderStatus(int key, String desc) {
		this.key = key;
		this.desc = desc;
	}
	
	// 根据key值获取枚举值
	public static OrderStatus getOrderType(int key){
        for (OrderStatus value : OrderStatus.values()) {
            if(key == value.getKey()) {
                return value;
            }
        }
        //根据自身的业务 查不到可以返回null,或者抛出异常。
        return null;
    }
	
}
java
public class App2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        OrderStatus orderCancel = OrderStatus.ORDER_NO_PAY;
        // 常量索引为0
		System.out.println(orderCancel.ordinal());
        
        // 根据枚举中的key属性获取枚举值
		OrderStatus orderType = OrderStatus.getOrderType(2);
		System.out.println(orderType);
		System.out.println(orderType.getDesc());
	}

}