在针对定义为id,name的枚举类直接提供由枚举类转Map的方法,不需要再实现某个接口实现,内部采用反射的方式获取字段的值,同时对反射方法做了提取
提取通用反射获取值
public static Object getValueByFieldName(String fieldName, Object object){
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Object obj = field.get(object);
return obj;
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new ReflectException("通过 " + fieldName + " 字段获取对应值失败!" + e.getMessage());
}
}
转Map方法
1.将枚举类转成单个Map
public static Map<Integer, String> concertEnumToMap(Enum[] array) {
Map<Integer, String> map = new LinkedHashMap<>();
for (Enum t : array) {
map.put(Integer.parseInt(ReflectUtils.getValueByFieldName("id", t).toString()),
ReflectUtils.getValueByFieldName("name", t).toString());
}
return map;
}
2.将枚举类转成[{id:id,name:name}]的ListMap
public static List<Map<String, String>> concertEnumToListMap(Enum[] array) {
List<Map<String, String>> list = new ArrayList<>();
for (Enum t : array) {
Map<String, String> map = new LinkedHashMap<>();
map.put("id", ReflectUtils.getValueByFieldName("id", t).toString());
map.put("text", ReflectUtils.getValueByFieldName("name", t).toString());
list.add(map);
}
return list;
}