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

public class Hi { private final Map map; public Map getMap() { return map; } } 

我有这个Hi类,我希望map是不可变的。 我还需要一个吸气剂。 目前,另一个类可以从getter修改映射。 我想返回一个地图副本来解决这个问题,但Map是一个接口,所以这意味着我必须进行getter调用:

 return new HashMap(map); 

有没有其他方法可以做到这一点,而不强制地图是一个哈希映射? 我希望它能像以前一样保持同一级别。

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

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