一组值的Java验证方法

一组值的Java验证方法,java,spring,validation,Java,Spring,Validation,我正在尝试验证一组值“RecordStatus”和“Condition”。我已经想出了下面的方法 使用字符串recordStatus和condition定义类RecordStatusCodition 定义一个类RecordStatusCoditionValidator,实现如下 ArrayList有效列表= 新ArrayList(){{ 正在从我的其他代码调用该类以检查条件 if(!RecordStatusCoditionValidator.isProcessed(new RecordSta

我正在尝试验证一组值“RecordStatus”和“Condition”。我已经想出了下面的方法

  • 使用字符串recordStatus和condition定义类RecordStatusCodition

  • 定义一个类RecordStatusCoditionValidator,实现如下

  • ArrayList有效列表= 新ArrayList(){{

    正在从我的其他代码调用该类以检查条件

      if(!RecordStatusCoditionValidator.isProcessed(new RecordStatusCodition("","")))
                   // do processing
            }
    
    与上述情况类似,还有其他各种不同列表的情况,可能需要频繁更改


    虽然这很好,但我需要知道是否有更好的方法来实现这一点,因为我的大部分代码都依赖于这一点?

    我建议您使用
    Map
    HashMap
    实现)而不是
    ArrayList
    。这样可以保留对象的标识符(在本例中为
    A
    B
    )并将其状态存储为值。然后,您的
    isProcessed
    方法可以简化为

    map.containsKey(key); //Where key is either "A", "B", etc.
    
    此映射不应是类中的原始字段。我建议您将其包装在自己的对象中,您可以在应用程序中引用该对象而不是原始映射。这将使您可以控制不同的操作,并允许您在这些操作中进行一些预处理或后处理

    您的
    RecordStatusCondition
    类也可以重构为枚举(如果愿意),定义给定对象可以具有的条件范围:

    RecordStatusCondition.CREATED;
    RecordStatusCondition.INSERTED;
    
    然后,可以添加如下对象:

    recordStatusContainer.put(record.getId(), RecordStatusCondition.CREATED);
    
    使用
    get()
    方法也可以很容易地获得状态,但请记住,如果使用tour own对象作为键,则必须重新定义
    hascode()
    equals()
    ,才能使其工作


    作为附带建议,如果可能的话,您可以让您的
    记录状态
    (或任何代表您的主逻辑单元的对象)要了解其当前状态,请在其中添加一个
    RecordStatusCondition
    字段。

    但是如果我们使用maps,那么除了validList中的其他组合之外,如果我们还有一个组合“INSERTED and a”呢?这将是一个重复的键,'a'yea?@user1583803他们会引用与
    a
    完全相同的实例吗?这就是我为什么要告诉我们的原因在本例中,ed getId()假设每个状态都与任何对象类型的特定实例相关。否则,为什么
    a
    会有多个状态?在任何情况下,如果需要多个状态,请使用带有
    列表的
    HashMap
    设置值。
    
    RecordStatusCondition.CREATED;
    RecordStatusCondition.INSERTED;
    
    recordStatusContainer.put(record.getId(), RecordStatusCondition.CREATED);