java反射获取枚举所有的值

Posted SunFlowerXT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
                                                                                                         

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

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

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

以上是关于java反射获取枚举所有的值的主要内容,如果未能解决你的问题,请参考以下文章

如何反射取得一个对象中所有字段的值

Java之枚举注解反射

Java反射, 枚举,Lambda表达式

java反射获取属性值

C++遍历获得一个类的所有属性名,对该类的实例的所有属性的值 ...~~

用反射的方法获取枚举值(数据字典)