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

有没有另一种方法可以做到这一点而不强制地图成为哈希图?我希望它保持与以前相同的等级。

4

2 回答 2

10

Return Collections.unmodifiableMap(map),它提供了Map它包装的不可修改的视图。引用该方法的 Javadocs

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

于 2013-10-01T20:21:46.287 回答
0

使用 Collections API 返回一个 unmodifiableMap。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#unmodifiableMap(java.util.Map)

于 2013-10-01T20:22:32.613 回答