java - 在 Java 中使用 ENUMS 验证值组合的最佳方法是什么?

标签 java validation enums

我通过如下定义 ENUM 来验证从数据库检索的记录的状态

public enum RecordStatusEnum {
    CREATED("CREATED"),
    INSERTED("INSERTED"),   
    FAILED("FAILED");

private String recordStatusValue;

    RecordStatusEnum (String status) {
        recordStatusValue= status;
    }

    public boolean isSuccess() {
        return (this.equals(CREATED) || this.equals(INSERTED));
    }

}

方法 isSuccess() 用于检查检索到的记录的状态(来自员工的列状态)

if (!(employee.getStatus().isSuccess())) {
            // return error
        }

根据新要求,引入了一组条件,例如 A、B 和 C;对于他们来说,员工表中有一列“条件”。

所以我需要检索状态和条件,并查看它是否属于具有两者组合的集合。

例如:isSuccess() 应检查是否符合以下条件:

CREATED and A 
CREATED and B
INSERTED and C

必须实现这一点,以便我可以轻松地将新组合“INSERTED and B”添加到列表中。

解决上述问题的最佳方法是什么?

注意:在实际的业务场景中,有更多的状态和检查(例如 isFailed() canBeModified() 等)以及许多不同的组合

即使不使用 ENUMS,也可以建议任何方法。我提到 ENUMS,因为我不想与现有实现有太大偏差

最佳答案

有很多可能性,但你可以这样做(我删除了字符串状态,它不会添加任何值,因为它等于枚举的名称):

public enum RecordStatusEnum {
    CREATED(Condition.A, Condition.B),
    INSERTED(Condition.C),   
    FAILED();

    private Set<Condition> successConditions;

    RecordStatusEnum(Condition... successConditions) {
        this.successConditions = EnumSet.copyOf(Arrays.asList(successConditions));
    }

    public boolean isSuccess(Condition c) {
        return successConditions.contains(c);
    }
}

编辑:

具有两组条件的示例:

public enum RecordStatusEnum {
    CREATED(EnumSet.of(Condition.A, Condition.B),
            EnumSet.of(Condition.C)),
    INSERTED(EnumSet.of(Condition.C),
             EnumSet.of(Condition.B),
    FAILED(EnumSet.noneOf(Condition.class),
           EnumSet.noneOf(Condition.class));

    private Set<Condition> successConditions;
    private Set<Condition> modificationConditions;

    RecordStatusEnum(Set<Condition> successConditions,
                     Set<Condition> modificationConditions) {
        this.successConditions = successConditions;
        this.modificationConditions = modificationConditions;
    }

    public boolean isSuccess(Condition c) {
        return successConditions.contains(c);
    }

    public boolean canBeModified(Condition c) {
        return modificationConditions.contains(c);
    }
}

关于java - 在 Java 中使用 ENUMS 验证值组合的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789980/

相关文章:

java - Kotlin 中的赋值链?

python - 使用验证窗口向前走,用于时间序列数据交叉验证

c# - 没有找到合适的方法来覆盖 webapi

c# - 正则表达式 C#

java - Java 中的嵌套枚举

java - 如何将枚举值转换为int?

c++函数返回一个枚举?

java - 将当前类的对象传递给另一个类

java - IntelliJ 中的 Spring 项目中的 gradle 存在 java 版本控制问题

java - java中的记录器相关问题