在工作中,以前的枚举类都做的比较简单,直到与公司的一个大佬合作做项目时,看到了一个更加通用且全面的通用枚举类。
且更符合阿里巴巴的java技术规范,特此记录
以上引用自阿里巴巴Java开发手册1.4.0
主要特点如下:
- 枚举提供序号、值、注释信息
- 提供构造器和get set方法
- 提供转换列表的方法,方便业务更好的遍历和使用
- 提供使用序号获取注释信息的方法(可更方便的获取解释,便于业务端展示)
- 提供使用值获取注释信息的方法(可更方便的获取解释,便于业务端展示)
- 同样方式,也可添加其他方法
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即可