Java反射应用之获取枚举类的枚举

Java反射实际应用

实际工作中使用到的Java反射并不是很多,我接触到的基本上都是工具类中相对比较常用一些,本篇文章就是我实际工作中遇到的场景。

应用场景:一个审批流程第一个节点审批时,需要填写第二个节点的三个办理人员数据,三个办理人员的角色是固定的枚举类中的枚举值,这样第一个节点审批提交时,我们就需要创建三个不同角色的办理对象,创建对象时只需要获取枚举中的所有枚举,然后循环创建多个对象即可;这里用到获取枚举类中所有的枚举,就可以用反射的方式来获取,最终的到的是一个集合,这里我提供多种方法,通过反射方式和传统的方式都有,欢迎一起交流学习!

首先提供对应的枚举类:

public enum ReflexEnum {
    TEST_1("1", "测试1"),
    TEST_2("2", "测试2"),
    TEST_3("3", "测试3"),
    TEST_4("4", "测试4");
    private String code;
    private String desc;
    public String getCode() {
        return code;
    public void setCode(String code) {
        this.code = code;
    public String getDesc() {
        return desc;
    public void setDesc(String desc) {
        this.desc = desc;
    private ReflexEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;

传统方式:

    @Test
    void getAssignEnumValue() {
        List<String> codeList = new ArrayList<>();
        List<String> descList = new ArrayList<>();
        Map map = new HashMap();
        for (ReflexEnum value : ReflexEnum.values()) {
            String code = value.getCode();
            String desc = value.getDesc();
            codeList.add(code);
            descList.add(desc);
            map.put(code, desc);
        System.out.println(codeList);
        System.out.println(descList);
        System.out.println(map);

执行结果:

void getReflexValue() { Reflections reflections = new Reflections("com.chuxin.reflex.enums"); Set<Class<? extends BaseEnum>> monitorClasses = reflections.getSubTypesOf(BaseEnum.class); System.out.println("size:" + monitorClasses.size()); monitorClasses.forEach(m -> { try { System.out.println("name:" + m.getSimpleName()); BaseEnum[] enumConstants = m.getEnumConstants(); for (BaseEnum anEnum : enumConstants) { System.out.println("enumName:" + anEnum + " value:" + anEnum.getCode() + " name:" + anEnum.getDesc()); } catch (Exception e) { e.printStackTrace();

执行结果:

String enumName = "ReflexEnum"; try { List<ReflexModel> reflexModelList = new ArrayList<ReflexModel>(); Class cls = Class.forName("com.chuxin.reflex.enums." + enumName); Method method = cls.getMethod("values"); BaseEnum inter[] = (BaseEnum[]) method.invoke(null, null); for (BaseEnum enumMessage : inter) { ReflexModel vo = new ReflexModel(); vo.setCode( enumMessage.getCode() ); vo.setDesc( enumMessage.getDesc() ); reflexModelList.add(vo); for (ReflexModel reflexModel : reflexModelList) { System.out.println("code:"+reflexModel.getCode() +" ======= desc:"+ reflexModel.getDesc()); return; } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); System.out.println(Collections.singletonMap("ERROR", "指定类型未找到"));

执行结果: