Since the front end needs to obtain the enumeration value in real time according to the enumeration name, the enumeration data is obtained through reflection.
(1) First, we create a new enumeration class interface for later reflection use
package com.littlematch.enums.biz;
/**
* 枚举值接口定义类
*/
public interface Constant {
/**
* 获取描述
* @return
*/
public String desc();
/**
* 获取值 int
* @return
*/
public int val();
}
(2) Next, we create a new enumeration class
In this form, enumerations of the same business type can be grouped together without being restricted by enumeration class rules
package com.littlematch.enums;
import com.littlematch.enums.biz.Constant;
/**
* @ Description:
* @ Author :Match
* @ Date :上午 11:02 2018/11/28 0028
* @Version: $version$
*/
public class SystemEnum {
/**
* 上架状态
* @author :Match
*/
public enum StatusEnum implements Constant {
YES("是", 1),
NO("否", 2);
private String desc;
private int value;
StatusEnum(String desc, int value){
this.desc = desc;
this.value = value;
}
@Override
public String desc() {
return desc;
}
@Override
public int val() {
return value;
}
}
}
(3) Write a test class to test whether the data can be obtained
Here are the required parameters: package name + class name
format:
包名:com.littlematch.enums.base
类名:SystemEnum.StatusEnum
package com.littlematch.utils;
import com.littlematch.enums.biz.Constant;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* @ Description:${description}
* @ Author :Match
* @ Date :下午 15:09 2018/12/12 0012
* @Version: $version$
*/
public class Test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
//需要的参数
String enumType = "SystemEnum.StatusEnum";
String[] enumArray =enumType.split("\\.");
String enum2 =enumArray[1];
// 这里需要完整的包名+类名,所以包名也需要提前知道
String packageName = "com.littlematch.enums.base";
Class<?> clazz1 = Class.forName(packageName+"."+enumArray[0]);
Class<? extends Object> cl = clazz1.getClass();
Class innerClazz[] = clazz1.getDeclaredClasses();
//遍历内部类
for (Class class1 : innerClazz) {
//获取内部内的类名
String simpleName = class1.getSimpleName();
if (simpleName.equals(enum2)) {
//判断类是不是枚举类
if (class1.isEnum()) {
//反射获取枚举类
Class<Enum> clazz = (Class<Enum>) Class.forName(class1.getName());
//获取所有枚举实例
Enum[] enumConstants = clazz.getEnumConstants();
//根据方法名获取方法
Method val = clazz.getMethod("val");
Method desc = clazz.getMethod("desc");
for (Enum enum1 : enumConstants) {
//执行枚举方法获得枚举实例对应的值
Object invoke1 = val.invoke(enum1);
Object invoke2 = desc.invoke(enum1);
System.out.println(invoke1.toString()+":"+invoke2.toString());
}
}
}
}
}
}