2012-12-11 32 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