在Java中使用ENUMSvalidation值组合的最佳方法是什么?
我通过定义如下的ENUM来validation从DB检索的记录的状态
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; 对于他们来说,Employee表’条件’中有一列。
所以我需要检索状态和条件,看它是否属于具有两者组合的集合。
例如:isSuccess()应检查以下内容:
CREATED and A CREATED and B INSERTED and C
必须实现这一点,以便我可以轻松地在列表中添加一个新的组合,例如’INSERTED和B’。
针对上述问题的最佳方法是什么?
注意 :在实际的业务场景中,有许多更多的状态和检查(例如isFailed()canBeModified()等)具有许多不同的组合
即使不使用ENUMS,也可以建议任何方法。 我提到了ENUMS,因为我不想偏离现有的实现
有很多可能性,但你可以这样做(我删除了String状态,它不会添加任何值,因为它等于枚举的名称):
public enum RecordStatusEnum { CREATED(Condition.A, Condition.B), INSERTED(Condition.C), FAILED(); private Set 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 successConditions; private Set modificationConditions; RecordStatusEnum(Set successConditions, Set 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); } }
您还可以比较序数值,如下所示:
public enum RecordStatusEnum { CREATED, INSERTED, UPDATED, NEW, FAILED, FAILED_NO_DB, FAILED_CONSTRAINT_VIOLATION; public boolean isPersisted(RecordStatusEnum status) { return status.ordinal < NEW.ordinal; } public boolean isError(RecordStatusEnum status){ return status.ordinal >= FAILED.ordinal; }
}
- 配置Tomcat以使用Windows证书存储区进行SSL
- Java中是否存在一个到期的映射,它会在* first * insertion之后的一段时间后到期?
- 了解Java中的inheritance和抽象类
- JFrame.setExtendedState(MAXIMIZED_BOTH)是否与未修饰的帧一起使用?
- 在Mountain Lion中安装jpype
- 如何在Spring Boot中获取DispatcherServeletInitializerfunction
- 在线算法计算标准差
- Java相当于C ++ std :: map?
- 如何从Spring WebClient的ClientResponse中获取最佳字节数组?