java反射获取枚举所有的值

由于项目的发展,枚举也是越来越多,为了方便前端直接取值,而不是每一次增加枚举给说一次,就写了一个根据枚举包名+类名获取所有的枚举值的接口;具体方法如下:

一、我返回的一个List<Map<String,Object>>的对象,传入的是枚举的包名+类名

   如果确定了枚举的包名,其实也可以直接传入枚举的类名就可以了

/**
     * 根据枚举的字符串获取枚举的值
     *
     * @param className 包名+类名
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> getAllEnumByClassName(String className) throws Exception {
        // 1.得到枚举类对象
        Class<Enum> clz = (Class<Enum>) Class.forName(className);
        // 2.得到所有枚举常量
        Object[] objects = clz.getEnumConstants();
        Method getCode = clz.getMethod("getCode");
        Method getMessage = clz.getMethod("getMessage");
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = null;
        for (Object obj : objects) {
            map = new HashMap<String, Object>();
            map.put("code", getCode.invoke(obj));
            map.put("message", getMessage.invoke(obj));
            list.add(map);
        }
        return list;
    }
二、和第一个方法基本一样,就是中途获取的常量为枚举
/**
 * 根据枚举的字符串获取枚举的值
 *
 * @param className 包名+类名
 * @return
 * @throws Exception
 */
public static List<Map<String, Object>> getAllEnum(String className) throws Exception {
    // 得到枚举类对象
    Class<Enum> clazz = (Class<Enum>) Class.forName(className);
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    //获取所有枚举实例
    Enum[] enumConstants = clazz.getEnumConstants();
    //根据方法名获取方法
    Method getCode = clazz.getMethod("getCode");
    Method getMessage = clazz.getMethod("getMessage");
    Map<String, Object> map = null;
    for (Enum enum1 : enumConstants) {
        map = new HashMap<String, Object>();
        //执行枚举方法获得枚举实例对应的值
        map.put("code", getCode.invoke(enum1));
        map.put("message", getMessage.invoke(enum1));
        list.add(map);
    }
    return list;
}                                                                                                         

比如:我有一个枚举是这样子的:

在页面上通过接口,传入当前包名+类名获取得劲结果如下:

以上就是通过反射获取枚举值的方法,当然,还有别的方法,因为反射也不止这样一种

发布了33 篇原创文章 · 获赞 23 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/SunFlowerXT/article/details/90035512