如何防止类在另一个类中声明的hashmap中插入数据?

时间:2014-05-14 09:35:07

标签: java hashmap

我在最近的一次采访中被问到这个问题,我仍在寻找答案。

“如何防止类在另一个类中声明的hashmap中插入数据?”

进一步解释 - 问题说可见性应该存在于类外,但每次用户调用“hashmap.put(”a“,”sss“);从类外部 - 它应该抛出运行时例外。

2 个答案:

答案 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

的Javadoc
  

public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m)

     

返回指定地图的不可修改视图。这种方法   允许模块为用户提供&#34;只读&#34;访问内部   地图。对返回的地图进行查询操作&#34;通读&#34;到了   指定地图,并尝试修改返回的地图,是否直接   或通过其集合视图,产生一个   UnsupportedOperationException异常。

所以你可以在创建它的类中有一个普通的地图,并公开它的不可修改的视图。