1. 程式人生 > >【utils】通過列舉中的某個欄位值獲取列舉的EnumUtil工具類

【utils】通過列舉中的某個欄位值獲取列舉的EnumUtil工具類

有的時候遇到這種情況 , 我們有列舉的其中一個欄位的值 , 然後通過這個值獲取列舉或者其他欄位的資訊 , 如果沒有工具類 , 就需要在每個列舉中新增相應的方法 , 通過工具類的方法可以減少程式碼量 , 更加簡潔美觀

建立一個介面 CommonEnum

/**
 * 列舉介面
 */
public interface CommonEnum {
    //此處對應列舉的欄位,如狀態列舉StatusEnum定義了code,name,desc
    //那麼這裡定義這個三個欄位的get方法,可以獲取到所有的欄位
    int getCode();

    String getName();

    String getDesc();

}

列舉實現這個介面

/**
 * 狀態列舉
 */
public enum StatusEnum implements CommonEnum {

    WAITTING(0, "WAITTING", "等待"),
    STARTED(1, "STARTED", "開始"),
    END(2, "END", "結束");

    private int code;
    private String name;
    private String desc;

    StatusEnum(int code, String name, String desc) {
        this
.code = code; this.name = name; this.desc = desc; } @overwrite public int getCode() { return code; } public void setCode(int code) { this.code = code; } @overwrite public String getName() { return name; } public void
setName(String name) { this.name = name; } @overwrite public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } }

工具類EnumUtil

/**
 * 列舉工具類
 */
public class EnumUtil {

    /**
     * 返回指定編碼的'列舉'
     * @param code
     * @return SharedObjTypeEnum
     * @throws
     */
    public static <T extends CommonEnum> T getEnumBycode(Class<T> clazz, int code) {
        for(T _enum : clazz.getEnumConstants())
            if(code == _enum.getCode())
                return _enum;
        return null;
    }

    /**
     * 返回指定名稱的'列舉'
     * @param name
     * @return SharedObjTypeEnum
     * @throws
     */
    public static <T extends CommonEnum> T getEnumByName(Class<T> clazz, String name) {
        for(T _enum : clazz.getEnumConstants())
            if(_enum.getCode().equals(name))
                return _enum;
        return null;
    }

    /**
     * 返回指定描述的'列舉'
     * @param desc
     * @return SharedObjTypeEnum
     * @throws
     */
    public static <T extends CommonEnum> T getEnumByDesc(Class<T> clazz, String desc) {
        for(T _enum : clazz.getEnumConstants())
            if(_enum.getCode().equals(desc))
                return _enum;
        return null;
    }
}

使用方法

StatusEnum statusEnum = EnumUtil.getEnumBycode(StatusEnum.class, 1);

StatusEnum statusEnum = EnumUtil.getEnumByName(StatusEnum.class, "END");

StatusEnum statusEnum = EnumUtil.getEnumByDesc(StatusEnum.class, "開始");