java enum code-label模式的使用方法

通常我们定义的枚举类都会有两个字段:code、label,然后我们有会需要两个方法:

1.根据code获得枚举实例对象:getByCode

2.根据code获得对应的label:getLabelByCode

当然可以在每个枚举类中实现这两个方法,但是会发现这两个方法逻辑完全一致,但是又必须每次都写,代码不够简洁,有重复造轮子的嫌疑。

下面给出一种实现方式,解决重复造轮子的问题。

1.创建公共接口

java 复制代码
public  interface EnumInterface {

    String getCode();
    String getLabel();

}

2.创建枚举类并实现接口

java 复制代码
public enum PlanTypeEnum implements EnumInterface {

    WEEK_PLAN {
        @Override
        public String getCode() {
            return "week_plan";
        }

        @Override
        public String getLabel() {
            return "周计划";
        }
    },
    DAY_PLAN {
        @Override
        public String getCode() {
            return "day_plan";
        }

        @Override
        public String getLabel() {
            return "日计划";
        }
    },
    TEMP_PLAN {
        @Override
        public String getCode() {
            return "temp_plan";
        }

        @Override
        public String getLabel() {
            return "临时计划";
        }
    }
}

3.创建工具类

java 复制代码
public class CodeEnumUtil {
    private CodeEnumUtil() {}

    /**
     * 根据code获取枚举
     * @param clazz 枚举类
     * @param code code
     * @return 枚举
     */
    public static EnumInterface getByCode(Class<? extends Enum<?>> clazz, String code) {
        final Enum<?>[] enums = clazz.getEnumConstants();
        for (Enum<?> e : enums) {
            if (e instanceof EnumInterface) {
                EnumInterface enumInterface = (EnumInterface) e;
                if (enumInterface.getCode().equalsIgnoreCase(code)) {
                    return enumInterface;
                }

            }
        }
        return null;
    }

    /**
     * 没有找到时,返回code
     *
     * @param code code
     * @return label
     */
    public static String getLabelByCode(Class<? extends Enum<?>> clazz, String code) {
        EnumInterface enumInterface = getByCode(clazz, code);
        if (enumInterface == null) {
            return code;
        }
        return enumInterface.getLabel();
    }
}

4.使用

java 复制代码
CodeEnumUtil.getLabelByCode(PlanTypeEnum.class,"week_plan")
相关推荐
Naiva17 分钟前
【小技巧】Python + PyCharm 小智AI配置MCP接入点使用说明(内测)( PyInstaller打包成 .exe 可执行文件)
开发语言·python·pycharm
云动雨颤21 分钟前
Java并发性能优化|读写锁与互斥锁解析
java
梦子要转行27 分钟前
matlab/Simulink-全套50个汽车性能建模与仿真源码模型9
开发语言·matlab·汽车
ldj202034 分钟前
Centos 安装Jenkins
java·linux
hqxstudying42 分钟前
Intellij IDEA中Maven的使用
java·maven·intellij-idea
SimonKing44 分钟前
拯救大文件上传:一文彻底彻底搞懂秒传、断点续传以及分片上传
java·后端·架构
深栈解码44 分钟前
JUC并发编程 内存布局和对象头
java·后端
北方有星辰zz1 小时前
数据结构:栈
java·开发语言·数据结构
Seven971 小时前
一个static关键字引发的线上故障:深度剖析静态变量与配置热更新的陷阱
java
山野万里__1 小时前
C++与Java内存共享技术:跨平台与跨语言实现指南
android·java·c++·笔记