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反射获取枚举所有的值的主要内容,如果未能解决你的问题,请参考以下文章