【发布时间】:2013-10-01 20:20:19
【问题描述】:
public class Hi {
private final Map<String, String> map;
public Map<String, String> getMap() {
return map;
}
}
我有这个 Hi 类,我希望 map 是不可变的。我还需要一个吸气剂。目前,另一个类可以从 getter 修改地图。我想返回一份地图的副本来解决这个问题,但地图是一个接口,所以这是否意味着我必须进行 getter 调用:
return new HashMap<String,String>(map);
是否有另一种方法可以在不强制地图成为哈希图的情况下做到这一点?我希望它保持与以前相同的等级。
【问题讨论】:
-
查看
Collections.unmodifiableMap()。 -
@Popcorn
unmodifiableMap是地图的非常薄的包装,而不是副本,因此如果您使用这种技术,您还需要确保没有人可以通过其他方式访问底层地图,因为它仍然可以修改。例如,如果Hi的构造函数将地图作为参数,您应该复制它——如果您希望地图保持同一个类,这将很难做到。
标签: java object reference immutability getter-setter