java – 如果我们有原始列表,为什么我们可以更改不可修改的列表
通过查看
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 ); 结果是[1,2]. 解决方法
(底部的问题答案)
当您创建不可修改的列表时,目的是不应该由您以外的人(即API的客户端)修改它. 方法unmodifiableList(..)创建一个类型为UnmodifiableList的新对象(但这不是公共类),它获取原始列表,并将所有方法委托给它,除了修改它的方法. 关键是,如文件中所述:
举个例子:您有一个API检测到并且可以运行的设备列表,并且您希望为它们提供API的客户端.但他不应该改变它们.所以你有两个选择: >给他一份你的清单的深层副本,这样即使他修改了它,这也不会改变你的清单 现在,您可以找到问题标题的答案 – 不可修改的列表是原始集合的视图.因此,如果您需要向其添加新项目 – 比如说,您发现了一个刚刚插入的新设备,客户端将能够在其不可修改的视图中看到它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |