public class Hi {
private final Map<String, String> map;
public Map<String, String> getMap() {
return map;
}
}
我有这个Hi类,我希望map是不可变的。我还需要一个吸气剂。目前,另一个类可以从getter修改映射。我想返回地图的副本来解决这个问题,但Map是一个接口,所以这是否意味着我必须进行getter调用:
return new HashMap<String,String>(map);
有没有其他方法可以在不强制地图成为散列图的情况下执行此操作?我希望它能像以前一样保持同一级别。
答案 0 :(得分:9)
返回Collections.unmodifiableMap(map)
,它提供了Map
包装的不可修改的视图。引自the Javadocs for that method:
返回指定地图的不可修改视图。这种方法允许 模块为用户提供对内部地图的“只读”访问。 对返回的地图的查询操作“通读”到指定的 映射,并尝试修改返回的地图,无论是直接还是通过 它的集合视图导致UnsupportedOperationException。
答案 1 :(得分:0)
使用Collections API返回不可修改的Map。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#unmodifiableMap(java.util.Map)