1 本节总结
1. 总结1 现在有多个枚举类,需要一个通用方法来处理枚举
(1) 第一个功能:遍历枚举类中每一个常量对象,然后返回给前端所需要的数据形式。
(2)第二个功能:根据前端传来的整数,得到对应枚举中描述信息。
2. 总结2 获取一个枚举类中所有常量对象两种方法
可以通过反射执行values(本文中采用方法),也可以通过class对象的getEnumConstants()方法获取枚举类型所有常量对象,但是执行速度没有直接通过反射执行values方法快
2 代码
1. 需要一个枚举类接口
1 2 3 4 5 6 |
public interface IRejectReason { public String getName(); public void setName(String name); public int getCode(); public void setCode(int code); } |
2 . 定义一个具体枚举类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
public enum RejectReason implements IRejectReason { Name_NOT_REAL(1,"名字不是真实的"), CARD_REASON(2,"身份证信息错误"); private int code; private String name; private RejectReason(int code ,String name){ this.code = code; this.name = name; } public static RejectReason codeOf(int code){ for(RejectReason rejectReason : RejectReason.values()){ if(rejectReason.code==code){ return rejectReason } } } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
3. 定义通用处理枚举类的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public class RejectUtils { /** * 显示方法 * @param c * @throws Exception */ public static <T extends IRejectReason> void fetchRejectReasonForView(Class<T> c) throws Exception { Method method = c.getDeclaredMethod("values"); System.out.println("method.type=" + method.getReturnType().getName()); T[] elements = (T[]) method.invoke(null, null); for (T element : elements) { System.out.println("t.code=" + element.getCode() + " t.name=" + element.getName()); } } /** * 通过id来查询枚举的某一个值 * @param c * @param id * @return * @throws Exception */ public static <T extends IRejectReason> String queryById(Class<T> c, int id) throws Exception { //需要加上codeOf的参数类型 Method method = c.getDeclaredMethod("codeOf", int.class); T rejectReasonType = (T) method.invoke(null, id); if (rejectReasonType == null) { return ""; } StringBuilder reason = new StringBuilder(); reason.append(rejectReasonType.getName()); return reason.toString(); } } |
4. 测试这个工具方法
1 2 3 4 5 |
public class TestRejectReason { public static void main(String[] args) throws Exception{ RejectUtils.fetchRejectReasonForView(RejectReason.class); } } |
5 、结果为
t.code=1 t.name=名字不是真实的
t.code=2 t.name=身份证信息错误