一、前言
参考hutool的hutool-all包的cn.hutool.core.util.EnumUtil枚举工具类,获取枚举映射关系进行匹配转换等处理。
二、代码说明
package cn.hutool.core.util;import cn.hutool.core.lang.Assert;import cn.hutool.core.map.MapUtil;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class EnumUtil { public EnumUtil() { } public static boolean isEnum(Class<?> clazz) { Assert.notNull(clazz); return clazz.isEnum(); } public static boolean isEnum(Object obj) { Assert.notNull(obj); return obj.getClass().isEnum(); } public static String toString(Enum<?> e) { return null != e ? e.name() : null; } public static <T extends Enum<T>> T fromString(Class<T> enumClass, String value) { return Enum.valueOf(enumClass, value); } public static <T extends Enum<T>> T likeValueOf(Class<T> enumClass, Object value) { if (value instanceof CharSequence) { value = value.toString().trim(); } Field[] fields = ReflectUtil.getFields(enumClass); Enum<?>[] enums = (Enum[])enumClass.getEnumConstants(); Field[] arr$ = fields; int len$ = fields.length; for(int i$ = 0; i$ < len$; ++i$) { Field field = arr$[i$]; String fieldName = field.getName(); if (!field.getType().isEnum() && !"ENUM$VALUES".equals(fieldName) && !"ordinal".equals(fieldName)) { Enum[] arr$ = enums; int len$ = enums.length; for(int i$ = 0; i$ < len$; ++i$) { Enum<?> enumObj = arr$[i$]; if (ObjectUtil.equal(value, ReflectUtil.getFieldValue(enumObj, field))) { return enumObj; } } } } return null; } public static List<String> getNames(Class<? extends Enum<?>> clazz) { Enum<?>[] enums = (Enum[])clazz.getEnumConstants(); if (null == enums) { return null; } else { List<String> list = new ArrayList(enums.length); Enum[] arr$ = enums; int len$ = enums.length; for(int i$ = 0; i$ < len$; ++i$) { Enum<?> e = arr$[i$]; list.add(e.name()); } return list; } } public static List<Object> getFieldValues(Class<? extends Enum<?>> clazz, String fieldName) { Enum<?>[] enums = (Enum[])clazz.getEnumConstants(); if (null == enums) { return null; } else { List<Object> list = new ArrayList(enums.length); Enum[] arr$ = enums; int len$ = enums.length; for(int i$ = 0; i$ < len$; ++i$) { Enum<?> e = arr$[i$]; list.add(ReflectUtil.getFieldValue(e, fieldName)); } return list; } } public static List<String> getFieldNames(Class<? extends Enum<?>> clazz) { List<String> names = new ArrayList(); Field[] fields = ReflectUtil.getFields(clazz); Field[] arr$ = fields; int len$ = fields.length; for(int i$ = 0; i$ < len$; ++i$) { Field field = arr$[i$]; String name = field.getName(); if (!field.getType().isEnum() && !name.contains("$VALUES") && !"ordinal".equals(name) && !names.contains(name)) { names.add(name); } } return names; } public static <E extends Enum<E>> LinkedHashMap<String, E> getEnumMap(Class<E> enumClass) { LinkedHashMap<String, E> map = new LinkedHashMap(); Enum[] arr$ = (Enum[])enumClass.getEnumConstants(); int len$ = arr$.length; for(int i$ = 0; i$ < len$; ++i$) { E e = arr$[i$]; map.put(e.name(), e); } return map; } public static Map<String, Object> getNameFieldMap(Class<? extends Enum<?>> clazz, String fieldName) { Enum<?>[] enums = (Enum[])clazz.getEnumConstants(); if (null == enums) { return null; } else { Map<String, Object> map = MapUtil.newHashMap(enums.length); Enum[] arr$ = enums; int len$ = enums.length; for(int i$ = 0; i$ < len$; ++i$) { Enum<?> e = arr$[i$]; map.put(e.name(), ReflectUtil.getFieldValue(e, fieldName)); } return map; } }}