认识枚举
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);
}