我在最近的一次采访中被问到这个问题,我仍在寻找答案。
“如何防止类在另一个类中声明的hashmap中插入数据?”
进一步解释 - 问题说可见性应该存在于类外,但每次用户调用“hashmap.put(”a“,”sss“);从类外部 - 它应该抛出运行时例外。
答案 0 :(得分:1)
这是良好封装的一部分,保护你班级的内部工作与其他人保持一致。
确保Map
字段是私有的,并且每当您从对象返回地图时,其他人都可以看到它,确保将其包装在Collections.unmodifiableMap中。
class X {
private Map<String, String> map = new HashMap<>();
public Map<String, String> getMap() {
return Collections.unmodifiableMap(map);
}
}
答案 1 :(得分:1)
来自Collections.unmodifiableMap
public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m)
返回指定地图的不可修改视图。这种方法 允许模块为用户提供&#34;只读&#34;访问内部 地图。对返回的地图进行查询操作&#34;通读&#34;到了 指定地图,并尝试修改返回的地图,是否直接 或通过其集合视图,产生一个 UnsupportedOperationException异常。
所以你可以在创建它的类中有一个普通的地图,并公开它的不可修改的视图。