package cn.org.rapid_framework.lang.enums; import java.util.LinkedHashMap; import org.apache.commons.lang.StringUtils; /** * 枚举工具类 * * @author badqiu */ @SuppressWarnings("all") public class EnumBaseUtils { /** * 将EnumBase.getCode()作为Key,EnumBase.getDesc()作为value,存放在Map中并返回 * @param <T> * @param values * @return */ public static <T extends EnumBase> LinkedHashMap toMap(Class<? extends EnumBase> enumClass) { return toMap(enumClass.getEnumConstants()); } /** * 将EnumBase.getCode()作为Key,EnumBase.getDesc()作为value,存放在Map中并返回 * @param <T> * @param values * @return */ public static <T extends EnumBase> LinkedHashMap toMap(T[] values) { LinkedHashMap map = new LinkedHashMap(); for(EnumBase item : values) { map.put(item.getCode(), item.getDesc()); } return map; } public static <T extends EnumBase<K>,K> K getCode(T enumValue) { if(enumValue == null) return null; return enumValue.getCode(); } public static <T extends EnumBase> String getDesc(T enumValue) { if(enumValue == null) return null; return enumValue.getDesc(); } public static <T extends Enum> String getName(T enumValue) { if(enumValue == null) return null; return enumValue.name(); } /** * 根据code查找得到Enum * @param code * @param values * @return */ public static <T extends EnumBase> T getByCode(Object code,Class<? extends EnumBase> enumClass) { return (T)getByCode(code, enumClass.getEnumConstants()); } /** * 根据code查找得到Enum * @param code * @param values * @return */ public static <T extends EnumBase> T getByCode(Object code,T[] values) { if(code == null) return null; if(code instanceof String && StringUtils.isBlank((String)code)) return null; for (T item : values) { if (item.getCode().equals(code)) { return item; } } return null; } /** * 根据code得到Enum,找不到则抛异常.如果code为null或者是空字符串,则返回null * @throws IllegalArgumentException 根据code得到Enum,找不到则抛异常 */ public static <T extends EnumBase> T getRequiredByCode(Object code,Class<? extends EnumBase> enumClass) { return (T)getRequiredByCode(code, enumClass.getEnumConstants()); } /** * 根据code得到Enum,找不到则抛异常.如果code为null或者是空字符串,则返回null * @param <T> * @param code * @param values * @return * @throws IllegalArgumentException 根据code得到Enum,找不到则抛异常 */ public static <T extends EnumBase> T getRequiredByCode(Object code,T[] values) throws IllegalArgumentException { if(code == null) return null; if(code instanceof String && StringUtils.isBlank((String)code)) return null; EnumBase v = getByCode(code,values); if(v == null) { if(values.length > 0) { String className = values[0].getClass().getName(); throw new IllegalArgumentException("not found Enum:"+className+" value by code:"+code); }else { throw new IllegalArgumentException("not found Enum by code:"+code); } } return (T)v; } }