【utils】通過列舉中的某個欄位值獲取列舉的EnumUtil工具類
阿新 • • 發佈:2019-01-07
有的時候遇到這種情況 , 我們有列舉的其中一個欄位的值 , 然後通過這個值獲取列舉或者其他欄位的資訊 , 如果沒有工具類 , 就需要在每個列舉中新增相應的方法 , 通過工具類的方法可以減少程式碼量 , 更加簡潔美觀
建立一個介面 CommonEnum
/**
* 列舉介面
*/
public interface CommonEnum {
//此處對應列舉的欄位,如狀態列舉StatusEnum定義了code,name,desc
//那麼這裡定義這個三個欄位的get方法,可以獲取到所有的欄位
int getCode();
String getName();
String getDesc();
}
列舉實現這個介面
/**
* 狀態列舉
*/
public enum StatusEnum implements CommonEnum {
WAITTING(0, "WAITTING", "等待"),
STARTED(1, "STARTED", "開始"),
END(2, "END", "結束");
private int code;
private String name;
private String desc;
StatusEnum(int code, String name, String desc) {
this .code = code;
this.name = name;
this.desc = desc;
}
@overwrite
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
@overwrite
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@overwrite
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
工具類EnumUtil
/**
* 列舉工具類
*/
public class EnumUtil {
/**
* 返回指定編碼的'列舉'
* @param code
* @return SharedObjTypeEnum
* @throws
*/
public static <T extends CommonEnum> T getEnumBycode(Class<T> clazz, int code) {
for(T _enum : clazz.getEnumConstants())
if(code == _enum.getCode())
return _enum;
return null;
}
/**
* 返回指定名稱的'列舉'
* @param name
* @return SharedObjTypeEnum
* @throws
*/
public static <T extends CommonEnum> T getEnumByName(Class<T> clazz, String name) {
for(T _enum : clazz.getEnumConstants())
if(_enum.getCode().equals(name))
return _enum;
return null;
}
/**
* 返回指定描述的'列舉'
* @param desc
* @return SharedObjTypeEnum
* @throws
*/
public static <T extends CommonEnum> T getEnumByDesc(Class<T> clazz, String desc) {
for(T _enum : clazz.getEnumConstants())
if(_enum.getCode().equals(desc))
return _enum;
return null;
}
}
使用方法
StatusEnum statusEnum = EnumUtil.getEnumBycode(StatusEnum.class, 1);
StatusEnum statusEnum = EnumUtil.getEnumByName(StatusEnum.class, "END");
StatusEnum statusEnum = EnumUtil.getEnumByDesc(StatusEnum.class, "開始");