java如何使用反射遍历枚举常量呢?
下文笔者讲述java代码遍历枚举常量的方法分享,如下所示
由于枚举类中使用了大量的常量,那么有没有办法一种办法可以获取批量获取常量信息呢? 下文笔者讲述使用反射的方式 批量输出常量信息,如下例所示
枚举类定义
public enum CacheEnum { /**产品ID缓存*/ PRODUCT_IDS("PRODUCT_IDS", "产品ID缓存" , 0, 0); /**缓存名称*/ private String name; /**缓存过期时间单位毫秒,0则永久缓存*/ private long ttl; /**描述*/ private String text; /**最大空闲时间,单位毫秒,多久未使用则丢弃,0则永不丢弃*/ private long maxIdleTime; CacheEnum(String name, String text, long ttl, long maxIdleTime){ this.name = name; this.ttl = ttl; this.text = text; this.maxIdleTime = maxIdleTime; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getTtl() { return ttl; } public void setTtl(long ttl) { this.ttl = ttl; } public long getMaxIdleTime() { return maxIdleTime; } public void setMaxIdleTime(long maxIdleTime) { this.maxIdleTime = maxIdleTime; } public String getText() { return text; } public void setText(String text) { this.text = text; } }
使用反射方法遍历常量并放到map中
public class CacheEnumTest { @Test public void test(){ Map<String, Map<String, Object>> config = new HashMap<String, Map<String, Object>>(); try { Class<CacheEnum> clazz = CacheEnum.class; Method name = clazz.getMethod("getName"); Method ttl = clazz.getMethod("getTtl"); Method maxIdleTime = clazz.getMethod("getMaxIdleTime"); for (Object obj : clazz.getEnumConstants()) { Map<String, Object> map = new HashMap<String, Object>(); map.put("ttl", ttl.invoke(obj)); map.put("maxIdleTime", maxIdleTime.invoke(obj)); config.put((String) name.invoke(obj), map); } } catch (Exception e) { throw new RuntimeException(e); } System.out.println(JSON.toJSONString(config)); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。