通过查看的代码Collections类,我才知道,当我们正在使用的方法unmodifiableList(List list)或者unmodifiableCollection(Collection c)它不是创建一个新的对象,但它返回同一个对象的引用,并覆盖其可以修改方法List[ add,addall,remove,retainAll. ..]
所以我跑了这个测试:
List modifiableList = new ArrayList();
modifiableList.add ( 1 );
List unmodifiableList = Collections.unmodifiableList( modifiableList );
// unmodifiableList.add(3); // it will throw the exception
modifiableList.add ( 2 );
System.out.println( unmodifiableList );
Run Code Online (Sandbox Code Playgroud)
结果是[ 1,2 ].
现在重点是为什么它指的是同一个对象?为什么不创建新对象?
Boz*_*zho 11
(底部的问题答案)
当您创建不可修改的列表时,目的是不应该由您以外的人修改它- 即API的客户端.
该方法unmodifiableList(..)创建一个新的类型对象UnmodifiableList(但这不是公共类),它获取原始列表,并将所有方法委托给它,除了修改它的方法.
关键是,如文件中所述:
返回指定列表的不可修改视图.此方法允许模块为用户提供对内部列表的"只读"访问.
举个例子:您有一个ListAPI检测到并且可以运行的设备,并且您希望为它们提供API的客户端.但他不应该改变它们.所以你有两个选择:
List,这样即使他修改了它,这也不会改变你的清单现在,您可以找到问题标题的答案 - 不可修改的列表是原始集合的视图.因此,如果您需要向其添加新项目 - 比如说,您发现了一个刚刚插入的新设备,客户端将能够在其不可修改的视图中看到它.
| 归档时间: |
|
| 查看次数: |
11801 次 |
| 最近记录: |