2017-07-28 20 views
-2

我面臨的一個設計問題,其中需求是這樣的,我保持了地圖的底層集合,說Map<String, List<String>>的Java:返回一個不可修改的集合,但應該能夠更新

我需要能夠返回這個地圖的不可修改的實例,以便訪問API的人不會篡改底層的地圖。

Class InMemoryDB { 

    private Map<String,List<String>> typeSlabValuesMap; 

    public List<String> getSlabs(String typeValue){ 

    if (typeSlabValuesMap.containsKey(typeValue) { 
     return Collections.unmodifiableList(typeSlabValuesMap.get(typeValue); 
    } 
    return Collections.emptyList(); 
    } 
} 

現在我也應該能夠在需要的時候改變地圖,例如,

  1. 新型進來,我應該能夠添加的種類和平板值需要改變
  2. 板坯值我應該能夠更新這些值在地圖

現在假設我只能在不可修改的列表中公開getSlabs,我應該如何設計上述地圖的更新部分?

+0

*你有什麼試圖解決你的問題?* – Lino

+0

顯示海報 – sForSujit

+0

你需要返回一個不可修改的地圖或一​​個不可修改的列表? – Lino

回答

0

你的地圖的所有更新都應該在你的類中進行(這似乎是該類的原始作者所期望的,無論如何,因爲他使用了Collections.unmodifiable包裝器)。根據您的業務邏輯提供驗證和更改地圖的公共方法。關於你給出的例子:

  1. public void addNewType(String type, List<String> values)
  2. public void updateType(String type, List<String> values)

兩者具有相同的簽名,其內容會有所不同。在這些方法中,盡一切可能防止你的地圖變得不一致。

相關問題