枚举工具类

/**
 * 通用接口类
 */
public interface IEnum {
	/**
	 * 获取code
	 * @return
	 */
	String getCode();

	/**
	 * 获取描述
	 * @return
	 */
	String getDesc();

}
public enum EnumBusType implements IEnum {
		PAY("01", "付款"),
		REFUND("02", "退款") ;

	private String code;
	private String desc;
	EnumBusType (String code, String desc) {
		this.code = code;
		this.desc = desc;
	}

	public String getCode() {
		return code;
	}

	public String getDesc() {
		return desc;
	}
}
/**
 * 枚举工具类
 */
public class EnumUtils {
	private static Logger logger = LoggerFactory.getLogger(EnumUtils.class);
	private static volatile Boolean init = true;
	public static ConcurrentHashMap < String, List < EnumObject >> enumMap = new ConcurrentHashMap < > ();

	public static < T extends IStatusEnum > T getEnumByCode(String code, Class << ? extends IStatusEnum > enumClass) {
		T[] enums = (T[]) enumClass.getEnumConstants();
		for (T en: enums) {
			if (en.getCode().equals(code)) {
				return en;
			}
		}
		return null;
	}

	public static < T extends IEnum > T getEnumByDesc(String desc, Class << ? extends IEnum > enumClass) {
		T[] enums = (T[]) enumClass.getEnumConstants();
		for (T en: enums) {
			if (en.getDesc().equals(desc)) {
				return en;
			}
		}
		return null;
	}


	/**
	 * 以list的方式返回所code
	 */
	public static List < EnumObject > getEnumList(String enumClassName) {
		if (init) {
			logger.info("初始化");
			synchronized(init) {
				if (init) {
					Set < Class < ? >> classSet = ClassUtil.scanPackageBySuper("com.common.enums", IEnum.class);

					classSet.forEach(clazz - > {
						if (null != enumMap.get(clazz.getSimpleName())) {
							logger.warn("枚举类重复:{}", clazz.getSimpleName());
						}
						IEnum[] enums = (IEnum[]) clazz.getEnumConstants();
						List < EnumObject > enumObjects = new ArrayList < > ();
						for (IEnum IEnum: enums) {
							EnumObject enumObject = new EnumObject();
							enumObject.setCode(IEnum.getCode());
							enumObject.setDesc(IEnum.getDesc());
							enumObjects.add(enumObject);
						}
						logger.info("添加枚举类:{}", clazz.getSimpleName());
						enumMap.put(clazz.getSimpleName(), enumObjects);
					});
				}
				init = false;
			}
		}
		logger.info("查询枚举类:{}-{}", enumClassName, enumMap.get(enumClassName));
		return enumMap.get(enumClassName);
	}

	public static String getEnumDescByCode(String code, Class << ? extends IEnum > enumClass) {
		if (null == code) {
			return "";
		}
		IEnum enums = getEnumByCode(code, enumClass);
		if (null == enums) {
			return "";
		}
		return enums.getDesc();
	}

	public static String getEnumCodeByDesc(String desc, Class << ? extends IEnum > enumClass) {
		if (null == desc) {
			return "";
		}
		IEnum enums = getEnumByDesc(desc, enumClass);
		if (null == enums) {
			return "";
		}
		return enums.getCode();
	}

	public static String getEnumDescByCodeWithDefault(String code, Class << ? extends IEnum > enumClass, String defaultVal) {
		String result = getEnumDescByCode(code, enumClass);
		if (StringUtils.isEmpty(result)) {
			return defaultVal;
		}
		return result;
	}
	public static String getEnumCodeByDescWithDefault(String desc, Class << ? extends IEnum > enumClass, String defaultVal) {
		String result = getEnumCodeByDesc(desc, enumClass);
		if (StringUtils.isEmpty(result)) {
			return defaultVal;
		}
		return result;
	}


}
/**
 * 查询枚举
 */
@RequestMapping(value = "/queryEnumByName")
@ResponseBody
public Result queryEnumByName(@RequestBody EnumReq req) {
	return Result.ok(EnumUtils.getEnumList(req.getEnumName()));
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值