目 录CONTENT

文章目录

Java中枚举类型的简单使用

Wonder
2020-09-12 / 0 评论 / 0 点赞 / 184 阅读 / 318 字 / 正在检测是否收录...

为了代码的可读性和可维护性,我们经常需要在项目中构建枚举类,而不是直接使用code+message的形式,本文简要记录一下本人在项目中常用的方式。

此类为判断一个服务器上引擎状态是否可用的枚举类,具体操作见以下代码及注释:

/**
 * 算法资源枚举类
 */
public enum ResourceStatusEnum {
    /**
     * 1
     * 正常
     */
    NORMAL(1, "正常"),
    /**
     * 2
     * 告警(训练引擎不可用)
     */
    ALARM_TRAINING(2, "告警(训练引擎不可用)"),
    /**
     * 3
     * 告警(推理引擎不可用)
     */
    ALARM_INFERENCE(3, "告警(推理引擎不可用)"),
    /**
     * 4
     * 告警(推理引擎、训练引擎均不可用)
     */
    ALARM_BOTH(4, "告警(推理引擎、训练引擎均不可用)");

    private Integer code;
    private String message;

    /**
     * 构造方法
     *
     * @param code    code
     * @param message message
     */
    ResourceStatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 根据code返回对应枚举类
     *
     * @param code code
     * @return
     */
    public static ResourceStatusEnum getEnumByCode(Integer code) {
        return getEnum(statusEnum -> statusEnum.getCode() == code);
    }

    /**
     * 使用Java8新特性函数式接口判断并返回对应枚举
     *
     * @param function
     *                       判断条件
     * @return 枚举
     */
    public static ResourceStatusEnum getEnum(Predicate<ResourceStatusEnum> function){
        for (ResourceStatusEnum statusEnum : ResourceStatusEnum.values()) {
            if (function.test(statusEnum)) {
                return statusEnum;
            }
        }
        return null;
    }
    
    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
0

评论区