问题标签 [unmodifiable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Collections.unmodifiableCollection 和 Collections.unmodifiableSet
假设我有以下Set
如果我想创建一个防御性副本,这样如果原始列表被修改,副本不会反映它,我可以这样做:
所以如果我这样做:
unmodifiableFruits
不会有菠萝。
或者我可以这样:
结果是一样的,unmodifiableFruits
不会有菠萝。
问题:
- 假设如果我
fruits
作为参数传递给一个类,首选方法是Collections.unmodifiableCollection()
?
原因是,我读过在构造函数中声明new
是一种不好的做法,如果我要使用Collections.unmodifiableSet()
,我需要声明一个new HashSet<String>(fruits)
.
为什么我不能这样做?
Collections.unmodifiableSet(fruits)
并让它返回一个不可修改的集合。
相反,我必须这样做:
是不是因为 Set 是一个接口,它不知道要返回哪个实现?
groovy - 为什么 Collections.unmodifiableCollection 允许您更改集合?
假设我必须遵循set
:
如果我在Collections.unmodifiableSet()
尝试使用该方法时使用它会引发异常add()
,但对于Collections.unmodifiableCollection()
. 为什么?
根据文档,它应该抛出一个错误:
返回指定集合的不可修改视图。此方法允许模块为用户提供对内部集合的“只读”访问权限。对返回集合的查询操作“通读”到指定集合,并尝试修改返回的集合,无论是直接还是通过其迭代器,都会导致 UnsupportedOperationException。
所有代码均使用 Groovy 2.5.2 编写
java - 将不可修改列表中的元素添加到地图
我不确定我是否想在这里做一些愚蠢的事情,但我找不到任何关于这件事的合适信息。我从远程位置通过 Collections.unmodifiableList(MyList) 获取列表。然后我想将接收到的元素添加到一个映射中以进行缓冲。奇怪的是 Eclipse 不允许我将所需的对象添加到地图中,并声明未为我创建的地图定义 add 方法。更准确地说,这是我的问题的代表性代码:
在我尝试将对象添加到缓冲区的行中,添加函数带有下划线,它告诉我:
这与我的临时列表不可修改有关吗?无论如何,我只想从地图中的元素中读取信息。
提前致谢!