使用Collections.unmodifiableMap()可创建只读Map,需先创建普通Map再包装为不可修改视图,任何修改操作将抛出UnsupportedOperationException;注意原始Map引用仍可修改且影响只读视图,因此应立即封装并避免暴露原引用,类似方法还有unmodifiableList、unmodifiableSet等。

在Java中创建一个只读的Map对象,可以通过Collections.unmodifiableMap()方法实现。这个方法会返回一个对原Map的不可修改视图,任何试图修改该Map的操作都会抛出UnsupportedOperationException异常。
使用 Collections.unmodifiableMap() 创建只读Map
你需要先创建一个普通的Map,然后将其包装为不可修改的Map。
示例代码:
Map
originalMap.put("one", 1);
originalMap.put("two", 2);
Map
// 下面这行代码会抛出异常:
// readOnlyMap.put("three", 3); // UnsupportedOperationException
注意事项
虽然返回的Map是只读的,但如果你还持有原始Map的引用,依然可以通过原始Map进行修改,这些修改会反映到只读视图中。因此要确保真正“只读”,必须不再保留可修改的引用。
建议做法:- 创建Map后立即封装为只读
- 不要暴露原始可变Map的引用
- 可在构造函数或工具方法中完成封装
适用于其他集合类型
Collections.unmodifiableMap()属于Java集合框架提供的不可修改视图系列方法之一,类似的还有:
JSPGOU一直以来都和jeecms、jeebbs一样,是收费软件,但是从2014年7月12日开始,开始jspgou发布第一个免费版,金磊科技承诺:永远不向使用jspgou免费版用户索取任何费用,为免费用户提供更好的技术支持服务,根据用户提出的完善建议快速完善jspgou系统。 jspgou系统使命:做中国最优秀的免费网店系统,让更多的用户了解和使用java产品。 jspgou免费版适用对象:不限
立即学习“Java免费学习笔记(深入)”;
unmodifiableList()unmodifiableSet()unmodifiableCollection()
它们都遵循相同的使用模式:基于已有集合创建一个禁止修改操作的视图。
基本上就这些。只要记住封装后别再动原始Map,就能安全地实现只读效果。









