public class Hi {
private final Map<String, String> map;
public Map<String, String> getMap() {
return map;
}
}
我有这个喜类,我想映射是不可变的。我也需要一个getter。目前,另一个类可以从getter修改地图。我想回到地图的副本来解决这个问题,但地图是一个接口,这是否意味着我必须使吸气电话:Java:如何制作一个私人字段在一个类中不可变的地图?
return new HashMap<String,String>(map);
是否有另一种方式做到这一点不强制映射为散列表?我希望它保持与以前一样的班级。
查看'Collections.unmodifiableMap()'。 –
@Popcorn'unmodifiableMap'是地图上的一个非常薄的包装,而不是副本,所以如果你使用这种技术,你还需要确保没有人能够以另一种方式访问底层地图,因为它仍然可以被修改。例如,如果'Hi'的构造函数将地图作为参数,则应该复制它 - 如果要使地图保持相同的类,这将很难实现。 – Grundlefleck