以保证所有对象的唯一方法里面一个Map不能被修改,即使Map本身是不可修改的,将是使对象本身不变.
该unmodifiableMap()方法保证Map不能修改,但它根本不保证它包含的对象.看看这个就知道如何使对象不可变.有关具体示例,请查看String类的工作原理:您无法修改字符串中的字符,并且所有可以更改字符串的方法(例如toUpperCase():)都会返回一个新字符串.这就是你想要的内容中的对象的行为Map.
假定问题中的映射包含Set<String>其值,那么在将它们添加到映射之前使用Collections.unmodifiableSet()集将使它们不可变,因为如上所述,它已经是不可变的.String
您可以使用它Collections.unmodifiableMap来获取无法修改的地图视图.
每种类型的集合都有不同的方法:
unmodifiableCollection 返回泛型Collection的不可修改视图unmodifiableSet 返回Set的不可修改的视图unmodifiableList 返回List的不可修改的视图unmodifiableSortedSet 返回SortedSet的不可修改的视图unmodifiableSortedMap 返回SortedMap的不可修改的视图如果这些项本身就是集合,那么您可以编写一个递归方法来构造一个新集合,该集合包含原始项目的不可修改的视图.
一般来说,如果您存储在一个集合中的项目本身可以被修改,那么没有什么可以阻止您这样做,而不是制作防御性副本.
| 归档时间: | 
 | 
| 查看次数: | 919 次 | 
| 最近记录: |