2012-12-11 35 views
0

我想验证一组值'RecordStatus'和'条件'。想出了下面的方法。一组值的Java验证方法

  1. 定义一个RecordStatusCodition类,其中包含字符串recordStatus和condition。

  2. 定义如下

的ArrayList validList = 新的ArrayList()实现的类RecordStatusCoditionValidator {{

    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

我建议你使用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(或任何对象代表你的主要逻辑单元在这里)知道它的当前状态bu增加一个RecordStatusCondition字段。

+0

但是,如果我们使用地图,如果除了validList中的其他组合还有'INSERTED和A'组合,该怎么办?这将是一个重复的关键,'A'是啊? – user1583803

+0

@ user1583803它们是否会引用完全相同的'A'实例?这就是为什么我在示例中使用getId()的原因,假设每个状态都与某个对象类型的特定实例相关。否则,为什么'A'有多个状态?无论如何,如果您需要多个状态,请改用带有List 或Set 值的'HashMap'。 – Gamb