Java:返回不可修改的集合,但应该能够更新基础集合

时间:2017-07-28 09:56:31

标签: java oop design-patterns collections

我面临一个设计问题,其中要求是这样我维护地图,比如说Map<String, List<String>>

我需要能够返回此 Map 的不可修改的实例,以便访问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. 需要更改平板值我应该能够使用这些值更新地图
  3. 现在假设我只能在不可修改的列表中公开getSlabs,如何设计上述地图的更新部分?

1 个答案:

答案 0 :(得分:0)

地图的所有更新都应该在您的课程中进行(无论如何,这似乎是该课程的原作者所希望的,因为他使用了Collections.unmodifiable包装器)。提供根据业务逻辑验证和更改映射的公共方法。关于你给出的例子:

  1. public void addNewType(String type, List<String> values)
  2. public void updateType(String type, List<String> values)
  3. 两者都有相同的签名,其内容会有所不同。在这些方法中,尽一切努力防止地图变得不一致。