Java:如何在一个类中创建一个私有字段Map不可变?

时间:2013-10-01 20:20:20

标签: java object reference immutability getter-setter

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);

有没有其他方法可以在不强制地图成为散列图的情况下执行此操作?我希望它能像以前一样保持同一级别。

2 个答案:

答案 0 :(得分:9)

返回Collections.unmodifiableMap(map),它提供了Map包装的不可修改的视图。引自the Javadocs for that method

  

返回指定地图的不可修改视图。这种方法允许   模块为用户提供对内部地图的“只读”访问。   对返回的地图的查询操作“通读”到指定的   映射,并尝试修改返回的地图,无论是直接还是通过   它的集合视图导致UnsupportedOperationException。

答案 1 :(得分:0)