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

Pop*_*orn 2 java reference object immutability getter-setter

public class Hi {
    private final Map<String, String> map;
    public Map<String, String> getMap() {
        return map;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

return new HashMap<String,String>(map);
Run Code Online (Sandbox Code Playgroud)

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

rge*_*man 9

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

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