Java反射读取枚举类型值

在公司学的一点技巧,直接上干货示例代码了数据库

枚举类:ide

public enum CommodityTypeEnum implements SuperEnum {

    ZC(1, "正品商品"), // 正品商品
    FX(2, "分销商品"), // 分销商品
    ZH(3, "组合商品"), // 组合商品
    ZP(4, "赠品"), // 赠品
    BC(5, "包材"), // 包材
    HC(6, "耗材"), // 耗材
    FL(7, "辅料"), // 辅料
    XN(8, "虚拟品"), // 虚拟品
    FS(9, "附属品"), // 附属品
    CC(10, "残次品"), // 残次品
    OTHER(11, "其余");// 其余

    private Integer value;
    private String desc;

    CommodityTypeEnum(Integer value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    @Override
    public Integer getValue() {
        return this.value;
    }

    @Override
    public String getDesc() {
        return this.desc;
    }
}

枚举类父类:this

public interface SuperEnum {

    /**
     * 枚举数据库存储值
     */
    default String getDesc(){
        return null;
    };

    Serializable getValue();

}

调用方法:参数enumType为枚举类的类名称,EnumsVO为返回实体类型,这里就略了spa

  public List<EnumsVO> listEnums(String enumType) throws Exception {

        List<EnumsVO> list = new ArrayList<>();
        // 根据给定的类名初始化类
        Class<?> cls = Class.forName("cn.gushen.entity.enums." + enumType);
        // 实例化这个类
        SuperEnum[] values = (SuperEnum[]) cls.getMethod("values").invoke(new Object(), new Object[]{});
        for (SuperEnum item : values) {
            EnumsVO enumsVO = new EnumsVO();
            enumsVO.setCode(item.toString());
            enumsVO.setValue(item.getValue().toString());
            enumsVO.setName(item.getDesc());

            list.add(enumsVO);
        }
        return list;
    }

这种操做作下拉框挺适合的,今天记录下来,但愿也给看的朋友一点参考。code

相关文章
相关标签/搜索