【发布时间】:2013-09-30 13:45:42
【问题描述】:
java.util.Collections 类允许我使集合实例不可修改。下面的方法
protected Map<String, List<String>> getCacheData() {
return Collections.unmodifiableMap(tableColumnCache);
}
返回一个不可修改的Map,因此UnsupportedOperationException 是由尝试更改地图实例引起的。
@Test(expected = UnsupportedOperationException.class)
public void checkGetCacheData_Unmodifiable() {
Map<String, List<String>> cacheData = cache.getCacheData();
cacheData.remove("SomeItem");
}
不幸的是,所有List<String> 孩子都不是不可修改的。所以我想知道是否有办法对子值List<String> 强制执行不可修改的行为?
当然,或者我可以遍历映射键值对,使列表不可修改并重新组合映射。
【问题讨论】:
-
使用最终访问修饰符
-
@Ashokkuttuva 不正确,final 阻止您创建对象的新实例,如果列表已成为 final,您仍然可以修改列表的内容。
-
@Ashokkuttuva final ---> 分配。不是内容。喜欢阅读stackoverflow.com/questions/19049697/…
-
@OP 我猜默认是不可能的。自己写一篇,根据自己的需要。 stackoverflow.com/questions/16356232/unmodifiable-list-in-java
-
地图对列表如何处理它们的数据没有影响,所以事实上,你唯一能做的就是为不可修改的列表创建一个不可修改的地图。
标签: java collections map unmodifiable