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));
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


