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

相關文章
相關標籤/搜索