我正在尝试验证一组值'RecordStatus'和'Condition'。提出了以下方法。
使用字符串recordStatus和condition定义一个RecordStatusCodition类。
定义一个RecordStatusCoditionValidator类,实现如下
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
}
与上述类似,存在不同列表的各种其他条件,可能需要经常更改
虽然这很好用,但我需要知道是否有更好的方法,因为这是我的代码的大部分依赖的东西?
答案 0 :(得分:1)
我建议您使用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()
方法轻松获取状态,但请记住,如果您使用游览自己的对象作为键,则必须重新定义hascode()
和equals()
它起作用。
作为附带建议,如果可能的话,您可以让RecordStatus
(或任何对象代表您的主逻辑单元)知道当前条件为其添加RecordStatusCondition
字段。