关于枚举,看完这篇就够了

58 阅读2分钟

认识枚举

Java枚举(Enumeration)是一种特殊的类,它定义了一组固定的值,每个值都有一个名称和一个对应的数值。枚举是一种类型安全的表示方式,能够有效避免传递错误数据类型的问题,提高代码的可读性和可维护性。

语法

Java枚举使用enum关键字来定义,其语法格式为:

enum 枚举类型名称{
    常量1,
    常量2,
    ...
}

其中,枚举类型名称用于指定枚举类型的名称,常量用于表示枚举类型的值。在枚举类型中,每个常量都是一个枚举对象,可以通过枚举对象来访问其属性和方法。

案例

下面是一个定义订单状态枚举的例子:

@Getter  
@AllArgsConstructor  
public enum OrderEnum {  
  
    /**  
    * 订单已创建但未完成支付流程  
    */  
    UNPAID(1, "待支付"),  

    /**  
    * 订单已完成支付流程,待确认  
    */  
    PENDING(2, "待确认"),  

    /**  
    * 订单已被确认,并且开始处理  
    */  
    CONFIRMED(3, "已确认"),  

    /**  
    * 订单被取消,通常是由客户或者系统发起  
    */  
    CANCELED(4, "已取消"),  

    /**  
    * 已经完成退款流程  
    */  
    REFUNDED(5, "已退款"),  

    /**  
    * 订单处理完成,可能已经发货或者完成服务  
    */  
    COMPLETED(6, "已完成"),  

    /**  
    * 订单只有部分项目完成  
    */  
    PARTIAL_COMPLETED(7, "部分完成"),  

    /**  
    * 订单只退还部分金额  
    */  
    PARTIAL_REFUND(8, "部分退款");  


    private final Integer code;  

    private final String desc;
}

常用的几种枚举方式

Java中的枚举类提供了一个values()方法,这个方法可以返回一个枚举类型数组,其中包括了该枚举类中所定义的所有枚举常量的顺序排列。简单来说,values()方法返回一个包含所有枚举常量的数组,包括我们自己定义的和系统默认提供的所有常量。

OrderEnum[] values = OrderEnum.values();

借助values()方法,本文推荐两种常用的遍历枚举的方式:

    // 使用for遍历
    public OrderEnum fromCode(Integer code) {  
        for (OrderEnum orderEnum : OrderEnum.values()) {
            if (code.equals(orderEnum.code)) {
                return orderEnum;
            }
        }
        return null;
    }

    // 使用stream流处理
    public OrderEnum of(Integer code) {
        return Arrays.stream(OrderEnum.values())
                     .filter(type -> type.code.equals(code))
                     .findFirst().orElse(null);
    }