utils:一个通用枚举类

Posted 手心里的宇宙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了utils:一个通用枚举类相关的知识,希望对你有一定的参考价值。

在工作中,以前的枚举类都做的比较简单,直到与公司的一个大佬合作做项目时,看到了一个更加通用且全面的通用枚举类。
且更符合阿里巴巴的java技术规范,特此记录


以上引用自阿里巴巴Java开发手册1.4.0

主要特点如下:

  1. 枚举提供序号、值、注释信息
  2. 提供构造器和get set方法
  3. 提供转换列表的方法,方便业务更好的遍历和使用
  4. 提供使用序号获取注释信息的方法(可更方便的获取解释,便于业务端展示)
  5. 提供使用值获取注释信息的方法(可更方便的获取解释,便于业务端展示)
  6. 同样方式,也可添加其他方法
import com.google.common.collect.Lists;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public enum EnumTableLayer {
    ODS(1, "ODS", "SERV层"),
    DWD(2, "DWD", "DWD层"),
    DWA(3, "DWA", "DWA层"),
    DM(4, "DM", "DM层"),
    SERV(5, "SERV", "SERV层");

    private int codeInt;
    private String codeStr;
    private String msg;


    EnumTableLayer(int codeInt, String codeStr, String msg) {
        this.codeInt = codeInt;
        this.codeStr = codeStr;
        this.msg = msg;
    }

    public int getCodeInt() {
        return codeInt;
    }

    public void setCodeInt(int codeInt) {
        this.codeInt = codeInt;
    }

    public String getCodeStr() {
        return codeStr;
    }

    public void setCodeStr(String codeStr) {
        this.codeStr = codeStr;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    /**
     * 讲枚举转换成list格式,这样前台遍历的时候比较容易,列如 下拉框 后台调用toList方法,就可以得到codeInt,  codeStr和msg
     * @return
     */
    static List getList() {
        // Lists.newArrayList()其实和new ArrayList()几乎一模一样, 唯一它帮你做的(其实是javac帮你做的), 就是自动推导尖括号里的数据类型.
        List list = Lists.newArrayList();
        for (EnumTableLayer enumTableLayer : EnumTableLayer.values()) {
            Map<String, Object> map = new HashMap();
            map.put("codeInt", enumTableLayer.getCodeInt());
            map.put("codeStr", enumTableLayer.getCodeStr());
            map.put("msg", enumTableLayer.getMsg());
            list.add(map);
        }
        return list;
    }

    /**
     * 根据codeInt获取msg信息
     * @param codeInt
     * @return
     */
    public static String getMsgByCodeInt(int codeInt){
        String msgInfo = "";
        for (EnumTableLayer enumTableLayer : EnumTableLayer.values()) {
            if(enumTableLayer.getCodeInt() == codeInt){
                msgInfo = enumTableLayer.getMsg();
                continue;
            }
        }
        if(ToolUtil.isNotEmpty(msgInfo)){
            return msgInfo;
        } else {
            return String.valueOf(codeInt);
        }
    }

    /**
     * 根据codeStr获取msg信息
     * @param codeStr
     * @return
     */
    public static String getMsgByCodeStr(String codeStr){
        String msgInfo = "";
        for (EnumTableLayer enumTableLayer : EnumTableLayer.values()) {
            if(enumTableLayer.getCodeStr().equals(codeStr)){
                msgInfo = enumTableLayer.getMsg();
                continue;
            }
        }
        if(ToolUtil.isNotEmpty(msgInfo)){
            return msgInfo;
        } else {
            return codeStr;
        }
    }
}

其上的ToolUtil工具类,也是手动封装的,基本引用自Apache Commons 等包,故此直接使用Apache-Commons-lang包的isNotEmpty即可

以上是关于utils:一个通用枚举类的主要内容,如果未能解决你的问题,请参考以下文章

java中的枚举类

Java 枚举类

通用枚举到可迭代转换器 [关闭]

TimeUnit枚举类

关于java枚举类的一个问题

枚举类集对于枚举的支持