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