java反射获取枚举所有的值
日期: 2019-05-09 分类: 跨站数据测试 268次阅读
由于项目的发展,枚举也是越来越多,为了方便前端直接取值,而不是每一次增加枚举给说一次,就写了一个根据枚举包名+类名获取所有的枚举值的接口;具体方法如下:
一、我返回的一个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; }
比如:我有一个枚举是这样子的:
在页面上通过接口,传入当前包名+类名获取得劲结果如下:
以上就是通过反射获取枚举值的方法,当然,还有别的方法,因为反射也不止这样一种
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:java
精华推荐