背景
代码中常常需要判定值是否为枚举类型的某一个值,可以使用固定类型来转换,但是仍然希望有一个工具类,可以将传入的所有枚举类型转换为Map使用。
代码
1.枚举基类
/**
* @ClassName: IBaseEnum
* @Description: 相应状态码及信息--基础枚举接口
* @author: Administrator
* @date: 2021年4月25日 上午11:05:56
*/
public interface IBaseEnum {
/**
* @Title: getCode
* @Description: 获取code
* @return
* @return: String
*/
String getCode();
/**
* @Title: getMessage
* @Description: 获取Message
* @return
* @return: String
*/
String getMessage();
}
2.自定义枚举类
/**
* @author ChenChen
* @version 1.0.0
* @ClassName
* @Description 全局异常枚举信息
* @createTime 2021年12月30日 14:11:00
*/
public enum GlobalExceptionEnum implements IBaseEnum {
EXCEPTION_ENUM("EC_0001", "未知异常,请联系项目管理员!"),
RUNTIME_EXCEPTION_ENUM("EC_0002", "运行期间发生异常,请联系项目管理员!"),//测试枚举工具类使用
;
private String code;
private String message;
GlobalExceptionEnum(String code, String message) {
this.code = code;
this.message = message;
}
@Override
public String getCode() {
return this.code;
}
@Override
public String getMessage() {
return this.message;
}
}
3.转换工具类
/**
* @author ChenChen
* @version 1.0.0
* @ClassName EnumUtils
* @Description 枚举工具类
* @createTime 2021年12月30日 16:04:00
*/
public class EnumUtils {
/**
* @Description 将枚举转换成Map对象方便取值 - 固定类型- 仅为了提供思路
* @author ChenChen
* @date 2021/12/30
*
* @return
*/
public static Map<String, String> convertToMap() {
Map<String, String> mapResult = new HashMap<>();
Arrays.stream(GlobalExceptionEnum.values()).forEach(globalExceptionEnum -> {
mapResult.put(globalExceptionEnum.getCode(), globalExceptionEnum.getMessage());
});
return mapResult;
}
/**
* @Description 真正的工具类 - 将枚举转为Map使用,只要参数 clazz 继承了IbaseEnum
* @author ChenChen
* @date 2022/1/5
* @param clazz
* @return
*/
public static Map<String, String> generateConvertToMap(Class<? extends IBaseEnum> clazz) {
Map<String, String> mapResult = new HashMap<>();
if(!clazz.isEnum()) {
throw new UnsupportedOperationException("参数不合法:非枚举类,不支持转换,请检查程序是否有误!");
}
// 通过class.getEnumConstants();获取所有的枚举字段和值
IBaseEnum[] iBaseEnums = clazz.getEnumConstants();
for (IBaseEnum iBaseEnum : iBaseEnums) {
mapResult.put(iBaseEnum.getCode(), iBaseEnum.getMessage());
}
return mapResult;
}
// 测试使用
public static void main(String[] args) throws InstantiationException,
IllegalAccessException, InvocationTargetException {
Map<String, String> mapResult1 = EnumUtils.convertToMap();
System.out.println(mapResult1);
// 这里是真正工具调用的地方
Map<String, String> mapResult2 = EnumUtils.generateConvertToMap(GlobalExceptionEnum.class);
System.out.println(mapResult2);
}
}
运行结果
{EC_0002=运行期间发生异常,请联系项目管理员!, EC_0001=未知异常,请联系项目管理员!}
{EC_0002=运行期间发生异常,请联系项目管理员!, EC_0001=未知异常,请联系项目管理员!}