我面临一个设计问题,其中要求是这样我维护地图,比如说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();
}
}
现在我还应该能够在需要时更改地图,例如
现在假设我只能在不可修改的列表中公开getSlabs
,如何设计上述地图的更新部分?
答案 0 :(得分:0)
地图的所有更新都应该在您的课程中进行(无论如何,这似乎是该课程的原作者所希望的,因为他使用了Collections.unmodifiable包装器)。提供根据业务逻辑验证和更改映射的公共方法。关于你给出的例子:
public void addNewType(String type, List<String> values)
public void updateType(String type, List<String> values)
两者都有相同的签名,其内容会有所不同。在这些方法中,尽一切努力防止地图变得不一致。