根据枚举名称反射获取枚举数据
Class类是反射机制的起源,我们得到Class类对象有3种方法:
第一种:通过类名获得
Class<?> class = ClassName.class;
第二种:通过类名全路径获得:
Class<?> class = Class.forName(“类名全路径”);
第三种:通过实例对象获得:
Class<?> class = object.getClass();
通过反射操作枚举
@GetMapping(value = "/getEnum/{enumName}")
@ApiOperation(value = "根据枚举名称获取枚举数据", notes = "根据枚举名称获取枚举数据")
@OperationLog(action = "根据枚举名称获取枚举数据")
public ResultVo<List<GetEnumResVO>> getEnum(@PathVariable("enumName") String enumName){
try {
//反射获取枚举类
Class<Enum> clazz = (Class<Enum>) Class.forName("com.fajiajia.cloudresourcemanagebackend.enums." + enumName);
//获取所有枚举实例
Enum[] enumConstants = clazz.getEnumConstants();
//根据方法名获取方法
Method getValue = clazz.getMethod("getValue");
Method getOrder = clazz.getMethod("getOrder");
List<GetEnumResVO> list = new ArrayList<>();
for (Enum enum1 : enumConstants) {
GetEnumResVO vo = new GetEnumResVO();
vo.setName(enum1.name());
String value = getValue.invoke(enum1).toString();
vo.setValue(value);
Integer order = Integer.valueOf(getOrder.invoke(enum1).toString());
vo.setOrder(order);
list.add(vo);
}
return ResultVo.success(list);
}catch (Exception e){
e.printStackTrace();
log.error("{}:查询失败{}",enumName,e);
return ResultVo.error("查询失败");
}
}