一哥大佬好 那个获取枚举类这个方法有没有比较通用的写法

来源:7-2 优惠券模板实体类相关列值枚举定义

绾绾爱吃肉

2019-10-30

每个枚举类都写一遍感觉冗余有点严重哇 谢谢大佬指点

写回答

2回答

张勤一

2019-10-30

同学你好:

    枚举类能够做的工作很少,没有通用的写法。

    写代码大多数时候都是复制粘贴这样的工作,没必要纠结说重复了就不好,能实现功能满足需求就是很好的代码。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

5
0

NStart2018

2021-05-09


/**
 * 所有枚举类实现这个接口
 */
public interface CommonEnum {

    /**
     * 获取code
     *
     * @return
     */
    Integer getCode();

    /**
     * 获取message
     *
     * @return
     */
    String getMessage();

}


public class EnumDataInfo {

    private Integer code;

    private String msg;
}




/**
 * @Description: 枚举工具类
 * @Param:
 * @Return:
 * @Author: haungkewei
 * @CreateDate:2018/10/27 18:53
 * @Version:1.0
 */
public class EnumUtil {

    /**
     * 通过code获取枚举类CommonEnum
     *
     * @param code      : 枚举类code
     * @param enumClass : 枚举类对象
     * @param <T>
     * @return
     */
    public static <T extends CommonEnum> T getEnum(Integer code, Class<T> enumClass) {
        for (T t : enumClass.getEnumConstants()) {
            if (code.equals(t.getCode())) {
                return t;
            }
        }
        return null;
    }

    /**
     * 根据code获取枚举类的message
     *
     * @param code
     * @param enumClass
     * @param <T>
     * @return
     */
    public static <T extends CommonEnum> String getMessage(Integer code, Class<T> enumClass) {
        T t = getEnum(code, enumClass);
        if (null == t)
            return null;
        return t.getMessage();
    }


    /**
     * 获取枚举类所有的枚举集合map<code,message>
     *
     * @param enumClass : 枚举类对象
     * @param <T>
     * @return
     */
    public static <T extends CommonEnum> Map<Integer, String> getEnumMap(Class<T> enumClass) {
        Map<Integer, String> map = new HashMap<Integer, String>();
        for (T t : enumClass.getEnumConstants()) {
            map.put(t.getCode(), ((CommonEnum) t).getMessage());
        }
        return map;
    }

    /**
     * 获取所有枚举实例 EnumDataInfo
     *
     * @param enumClass
     * @param <T>
     * @return
     */
    public static <T extends CommonEnum> EnumDataInfo getEnumDataInfo(Class<T> enumClass) {
        EnumDataInfo info = new EnumDataInfo();
        for (T t : enumClass.getEnumConstants()) {
            info.setMsg(t.getMessage());
            info.setCode(t.getCode());
        }
        return info;
    }


    /**
     * 获取所有枚举实例List<CommonEnum>
     *
     * @param enumClass : 枚举类对象
     * @param <T>
     * @return
     */
    public static <T extends CommonEnum> List<EnumDataInfo> getEnumList(Class<T> enumClass) {
        List<EnumDataInfo> list = new ArrayList<>();
        for (T t : enumClass.getEnumConstants()) {
            EnumDataInfo info = new EnumDataInfo();
            info.setCode(t.getCode());
            info.setMsg(t.getMessage());
            list.add(info);
        }
        return list;
    }


    /**
     * 测试代码
     *
     * @param args
     */
    public static void main(String[] args) {

        //System.out.println(EnumUtil.getEnum(1, CommonEnum.class));
        //
        //System.out.println(EnumUtil.getMessage(1, CommonEnum.class));
        //
        //System.out.println(EnumUtil.getEnumMap(CommonEnum.class));
        //
        //System.out.println(EnumUtil.getEnumList(YesOrNoEnum.class));


    }

}


具体的某个枚举类,实现CommonEnum接口

public enum InputTypeEnum implements CommonEnum {

    INPUT(1, "输入框"),
    RADIO(2, "单选下拉"),
    CHECKBOX(3, "多选下拉"),
    DATE_YMD(4, "日期年月日"),
    DATA_HMS(5, "日期时分秒");


    private Integer code;
    private String message;

    InputTypeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return this.code;
    }

    public String getMessage() {
        return this.message;
    }
}


0
0

Spring Cloud微服务实战 打造企业级优惠券系统

微服务,SpringCloud,SpringBoot面试、毕设、

1210 学习 · 488 问题

查看课程