介绍两种写法:
还是老规矩,话不多少,直接上代码,之后再解释,先上车:
代码很完整,直接复用,自定义公共类也贴在后面了:
两种写法:
1、直接继承公共类
package com.tyzy.tms.common.enums;
import com.tyzy.tms.common.base.IBaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 订单状态
* @author julong
* @date 2023年08月17日 17:05:53
* @desc 订单状态 0 未提交 1 受理中 2 已受理 3 受理失败 4 已开单 5 已配载 6 运输中 7 待收货 8 已完成 10 取消
*/
public enum OrderStatusEnum implements IBaseEnum<Integer> {
/**
* 未提交
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_NEW(0, "未提交"),
/**
* 受理中
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_ACCEPT_LOADING(1, "受理中"),
/**
* 已受理
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_ACCEPT_SUCESS(2, "已受理"),
/**
* 受理失败
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_ACCEPT_ERROR(3, "受理失败"),
/**
* 已开单
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_BILL(4, "已开单"),
/**
* 已配载
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_ALREADY_STOWAGE(5, "已配载"),
/**
* 运输中
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_ON_LOADING(6, "运输中"),
/**
* 待收货
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_WAITE_SIGN(7, "待收货"),
/**
* 已完成
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_SUCESS(8, "已完成"),
/**
* 取消
* @author julong
* @date 2023年08月17日 17:23:11
*/
ORDER_STATUS_CANCEL(10, "取消");
@Getter
private Integer value;
@Getter
private String label;
OrderStatusEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
}
2、封装一次(也叫构造方法)
package com.tyzy.tms.common.enums;
import com.tyzy.tms.common.base.IBaseEnum;
import lombok.Getter;
/**
* 枚举值>5个的,放在这里
*/
public class AppLogEnum {
public enum BusinessModule implements IBaseEnum<Integer> {
SYSTEM(0, "系统模块"),
PLATFORM(1, "平台模块"),
PLAY(2, "支付模块"),
OILCARD(3, "油卡模块"),
WAYBILL(4, "运单模块"),
VEHICLE(5, "车辆模块"),
DRIVER(6, "司机模块"),
COMMON_FUNCTION(7, "常用菜单模块"),
TRANSPORT_LINE(8, "线路模块"),
TRANSPORT_LINE_STATION(9, "线路站点模块"),
CUSTOMER(10, "收发货人模块"),
STOWAGE(11, "配载模块"),
GOODS_TYPE(12, "商品助记码模块"),
FILE_UPLOAD(13, "文件上传模块"),
COMPANY(14, "企业信息模块"),
WAYBILL_SIGN(15, "运单签收记录模块"),
STOWAGE_SMART(16, "配载助记码模块"),
SHOULD_CHARGE(17, "应收模块"),
SHOULD_PAY(18, "应付模块"),
VERIFICATION(19, "核销模块"),
INVOICE(20, "企业开票模块"),
COMMON_ENTERPRISE_PRICE(21,"企业价格"),
COMMON_SINGLE_PRICE(22,"散户价格"),
COMMON_OVERALL_PRICE(23,"整车价格"),
WAYBILL_STORAGE_GOODS(24,"运单-库存"),
CUSTOMER_ORDER(25,"订单模块"),
WECHAT_APPLICATION(26,"微信账号模块");
@Getter
private Integer value;
@Getter
private String label;
BusinessModule(Integer value, String label) {
this.value = value;
this.label = label;
}
}
public enum BusinessType implements IBaseEnum<Integer> {
ADD(1, "新增"),
UPDATE(2, "修改"),
DELETE(3, "删除"),
QUERY(4, "查询");
@Getter
private Integer value;
@Getter
private String label;
BusinessType(Integer value, String label) {
this.value = value;
this.label = label;
}
}
}
代码解释:
1、第一种单个字典
2、里面可以定义多个枚举,推荐第二种
公共类:
import cn.hutool.core.util.ObjectUtil;
import java.util.EnumSet;
import java.util.Objects;
/**
* 枚举通用接口
*
* @author fyname
* @date 2022/3/27 12:06
*/
public interface IBaseEnum<T> {
T getValue();
String getLabel();
/**
* 根据值获取枚举
*
* @param value
* @param clazz
* @param <E> 枚举
* @return
*/
static <E extends Enum<E> & IBaseEnum> E getEnumByValue(Object value, Class<E> clazz) {
Objects.requireNonNull(value);
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getValue(), value))
.findFirst()
.orElse(null);
return matchEnum;
}
/**
* 根据文本标签获取值
*
* @param value
* @param clazz
* @param <E>
* @return
*/
static <E extends Enum<E> & IBaseEnum> String getLabelByValue(Object value, Class<E> clazz) {
Objects.requireNonNull(value);
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getValue(), value))
.findFirst()
.orElse(null);
String label = null;
if (matchEnum != null) {
label = matchEnum.getLabel();
}
return label;
}
/**
* 根据文本标签获取值
*
* @param label
* @param clazz
* @param <E>
* @return
*/
static <E extends Enum<E> & IBaseEnum> Object getValueByLabel(String label, Class<E> clazz) {
Objects.requireNonNull(label);
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
String finalLabel = label;
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel))
.findFirst()
.orElse(null);
Object value = null;
if (matchEnum != null) {
value = matchEnum.getValue();
}
return value;
}
}
本文介绍了两种在Java中创建枚举的方法,一是通过继承公共类实现,二是通过封装构造方法。作者推荐使用后者,特别是当枚举值超过5个时。

3371

被折叠的 条评论
为什么被折叠?



