前言
跟普通类使用反射基本一样。
一、枚举类
public enum OperateType {
add("添加", 0),
delete("删除", 1),
select("查询", 2),
update("修改", 3),
stop("停止", 4),
restart("重启", 5),
check("检查", 6),
download("下载", 7),
upload("上传", 8),
login("登录", 9),
logout("退出", 10),
other("其他", 11);
private final String value;
private final int intVal;
OperateType(String value, int intVal) {
this.value = value;
this.intVal = intVal;
}
public static String getNameByIntVal(int intVal) {
for (OperateType operateType : values()) {
if (operateType.intVal == intVal)
return operateType.name();
}
return other.name();
}
public String getValue() {
return value;
}
public int getIntVal() {
return intVal;
}
}
二、反射获取枚举
@Test
public void invokeEnum() throws ClassNotFoundException {
String name = "select";
Class<?> clazz = Class.forName("com.iscas.biz.config.log.OperateType");
Object[] enumConstants = clazz.getEnumConstants();
Optional<Object> select = Arrays.stream(enumConstants)
.filter(item -> item.toString().equalsIgnoreCase(name))
.findFirst();
if (select.isPresent()){
OperateType enumValue = (OperateType)select.get();
System.out.println(enumValue.name());
}
}
三、反射调用枚举方法
@Test
public void invokeEnumMethod() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
String name = "select";
String methodName = "getValue";
Class<?> clazz = Class.forName("com.iscas.biz.config.log.OperateType");
Object[] enumConstants = clazz.getEnumConstants();
Optional<Object> select = Arrays.stream(enumConstants)
.filter(item -> item.toString().equalsIgnoreCase(name))
.findFirst();
if (select.isPresent()) {
Object obj =select.get();
Method method = clazz.getDeclaredMethod(methodName);
Object value = method.invoke(obj);
System.out.println(value);
}
}