介绍两种写法:
还是老规矩,话不多少,直接上代码,之后再解释,先上车:
代码很完整,直接复用,自定义公共类也贴在后面了:
两种写法:
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; } }