当前位置: 首页 > 面试题库 >

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

阎涵忍
2023-03-14
问题内容

我通过定义如下的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。对于他们,在Employee表“ condition”中有一列。

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

例如:isSuccess()应该检查以下内容:

CREATED and A 
CREATED and B
INSERTED and C

必须做到这一点,以使我很容易在列表中轻松地添加一个新的组合,例如“ INSERTED and B”。

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

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

即使不使用ENUMS,也可以建议使用任何方法。 我提到了ENUMS,因为我不想与现有的实现有很大的出入


问题答案:

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

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);
    }
}


 类似资料:
  • 问题内容: 在没有信用卡号且没有其他信息的情况下,PHP中确定该号码是否为有效号码的最佳方法是什么? 现在,我需要可以与American Express,Discover,MasterCard和Visa一起使用的功能,但是如果它也可以与其他类型的功能一起使用,可能会有所帮助。 问题答案: 卡号验证分为三个部分: 模式 -是否与发行者模式(例如VISA /万事达卡等)匹配 CHECKSUM- 它是否

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?

  • 问题内容: Java有哪些好的电子邮件地址验证库?公用验证器是否有替代方案? 问题答案: pache Commons通常被称为一个可靠的项目。不过请记住,如果您想确保它是真实的电子邮件,并且所有者希望在您的网站上使用它,则仍然必须向该地址发送一封验证电子邮件。 编辑:有一个错误,它对域的限制太严格,导致它不接受来自新TLD的有效电子邮件。 此错误已于03 / Jan / 15 02:48在comm

  • 问题内容: 这是一个小问题,因为我可以轻松地参加一对班做这项工作。我并不是真的想要这样做,我觉得应该有一些简单的,内置的,类似于Java的方法来返回两个值。你们最好的,最简单的方法是什么?数组?其他一些数据结构? 问题答案: 据我所知,不幸的是在Java中没有对的内置表示(我当然希望有)。就个人而言,当我编写一个项目时发现配对类经常很有用时,我会创建一个通用类(这可能是您在想的)。返回数组是一种快

  • 问题内容: 我想过滤java.util.Collection基于谓词的。 问题答案: Java 8(2014)在一行代码中使用流和lambda解决了此问题: 这是一个教程。 使用修改收集到位。(注意:在这种情况下,谓词将删除满足该谓词的对象): 允许过滤集合而无需编写循环或内部类: 你能想象一些更具可读性的东西吗?

  • 问题内容: 我有一个状态数组,比方说this.state.arr。我想向此状态属性添加一些内容,然后更改更多属性。 选项1 选项2 所以..我知道this.state应该被视为不可变的。但是可以像在选项1中那样使用它还是可以通过它设置状态,还是可以像在选项2中那样使用它,这样总是总是首先在内存中进行复制 问题答案: 使用concat的另一种简单方法: