gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:58:00 26 4
gpt4 key购买 nike

我通过如下定义 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com