一组值的Java验证方法

时间:2012-12-11 16:05:07

标签: java spring validation

我正在尝试验证一组值'RecordStatus'和'Condition'。提出了以下方法。

  1. 使用字符串recordStatus和condition定义一个RecordStatusCodition类。

  2. 定义一个RecordStatusCoditionValidator类,实现如下

  3.   

    ArrayList validList =                new ArrayList(){{

                      add(new RecordStatusCodition ("CREATED","A"));
                      add(new RecordStatusCodition ("INSERTED","B"));
                      add(new RecordStatusCodition ("INSERTED","A"));
                      }};
    
    public boolean isProcessed(RecordStatusCodition recordStatusCodition ) {
                        return checkList.contains(recordStatusCodition);
        }
    }
    

    从我的代码中调用此类以检查条件

      if(!RecordStatusCoditionValidator.isProcessed(new RecordStatusCodition("","")))
                   // do processing
            }
    

    与上述类似,存在不同列表的各种其他条件,可能需要经常更改

    虽然这很好用,但我需要知道是否有更好的方法,因为这是我的代码的大部分依赖的东西?

1 个答案:

答案 0 :(得分:1)

我建议您使用MapHashMap实施)代替ArrayList。这样,您可以保留对象的标识符(在本例中为AB)并将其状态存储为值。然后,您的isProcessed方法可以缩减为

map.containsKey(key); //Where key is either "A", "B", etc.

此地图不应是类中的原始字段。我建议你将它包装在你自己的对象中,你可以在你的应用程序中引用它而不是原始地图。这将使您可以控制不同的操作,并允许您在这些操作中进行一些预处理或后处理。

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

RecordStatusCondition.CREATED;
RecordStatusCondition.INSERTED;

然后,您可以添加如下对象:

recordStatusContainer.put(record.getId(), RecordStatusCondition.CREATED);

您也可以使用get()方法轻松获取状态,但请记住,如果您使用游览自己的对象作为键,则必须重新定义hascode()equals()它起作用。

作为附带建议,如果可能的话,您可以让RecordStatus(或任何对象代表您的主逻辑单元)知道当前条件为其添加RecordStatusCondition字段。