反射获取指定枚举的值

通过反射操作枚举

public enum  BillsTypeEnum {
    INVOICE("D","订单/外贸发货单"),
    CONTRACT("HT","内贸合同/外贸合同"),
    ;
    private final String code;
    private final String info;

    BillsTypeEnum(String code, String info) {
        this.code = code;
        this.info = info;
    }


    public String getCode() {
        return code;
    }

    public String getInfo() {
        return info;
    }
}

1、根据枚举类获取全部key value

public static List> getEnumByClass(Class clazz){
        List> list = new ArrayList<>();
        try {
            Object[] objects = clazz.getEnumConstants();
            Method getCode = clazz.getMethod("getCode");
            Method getName = clazz.getMethod("getInfo");
            for (Object object:objects) {
                Map map = new HashMap<>();
                String code = getCode.invoke(object).toString();
                String info = getName.invoke(object).toString();
                map.put(code,info);
                list.add(map);
            }
            return list;
        }catch (Exception e) {
            return list;
        }
    }

2、根据code获取指定enum的info

public static String getEnumInfoByClassAndCode(Class clazz,String code){
        try {
            Object[] objects = clazz.getEnumConstants();
            Method getCode = clazz.getMethod("getCode");
            Method getName = clazz.getMethod("getInfo");
            for (Object object:objects) {
                String code1 = getCode.invoke(object).toString();
                if (code1.equals(code)) {
                    String info = getName.invoke(object).toString();
                    return info;
                }

            }
            return "";
        }catch (Exception e) {
            return "";
        }
    }

3、根据info获取指定enum的code

public static String getEnumCodeByClassAndInfo(Class clazz,String info){
        try {
            Object[] objects = clazz.getEnumConstants();
            Method getCode = clazz.getMethod("getCode");
            Method getName = clazz.getMethod("getInfo");
            for (Object object:objects) {
                String info1 = getName.invoke(object).toString();
                if (info1.equals(info)) {
                    String code = getCode.invoke(object).toString();
                    return code;
                }

            }
            return "";
        }catch (Exception e) {
            return "";
        }
    }

4、获取指定enum的枚举名

public static List getEnumTitleByClass(Class clazz){
        List list = new ArrayList<>();
        try {
            Object[] objects = clazz.getEnumConstants();
            for (Object object:objects) {
                list.add(object.toString());
            }
            return list;
        }catch (Exception e) {
            return list;
        }
    }

5、根据code获取指定enum的枚举名

public static List getEnumTitleByClassAndCode(Class clazz,String code){
        List list = new ArrayList<>();
        try {
            Object[] objects = clazz.getEnumConstants();
            Method getCode = clazz.getMethod("getCode");
            for (Object object:objects) {
                if (getCode.invoke(object).toString().equals(code)) {
                    list.add(object.toString());
                    return list;
                }
            }
            return list;
        }catch (Exception e) {
            return list;
        }
    }

6、根据info获取指定枚举的枚举名

public static List getEnumTitleByClassAndInfo(Class clazz,String info){
        List list = new ArrayList<>();
        try {
            Object[] objects = clazz.getEnumConstants();
            Method getName = clazz.getMethod("getInfo");
            for (Object object:objects) {
                if (getName.invoke(object).toString().equals(info)) {
                    list.add(object.toString());
                    return list;
                }
            }
            return list;
        }catch (Exception e) {
            return list;
        }
    }

7、根据name获取指定枚举的code

public static List getEnumCodeByName(Class clazz,String name) {
        List list = new ArrayList<>();
        try {
            Object[] objects = clazz.getEnumConstants();
            Method getName = clazz.getMethod("getName");
            for (Object object:objects) {
                if (getName.invoke(object).toString().equals(name)) {
                    Method getCode = clazz.getMethod("getCode");
                    list.add(getCode.invoke(object).toString());
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            return list;
        }
    }

你可能感兴趣的:(反射获取指定枚举的值)