【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, "开始");

猜你喜欢

转载自blog.csdn.net/coldfireman/article/details/78829741