问题标签 [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.

0 投票
2 回答
170 浏览

java - Ruby 等价于 Java 的 Collections.unmodifiableList 和 Collections.unmodifiableMap

Collections.unmodifiableListJava和Ruby 标准 API 中是否有等价物Collections.unmodifiableMap

0 投票
3 回答
6315 浏览

java - 描述不可变的有序集合的类

我需要一些类/接口名称来描述不可变的有序集(按输入顺序,如LinkedHashSet)。我当然可以像这样使用这个类:

但这不会澄清我的方法。我想向阅读源代码的每个人说明,Set 是不可修改且唯一的,同时保持它的顺序for(Long l : set){}

0 投票
4 回答
1681 浏览

java - 不可修改的可修改对象列表

假设我们有一个List<List<String>>并且想让它完全不可修改。仅仅将它传递给 aCollection.unmodifiableList是不够的,因为仍然可以修改内部列表。

我会采用以下方法:

使其不可修改:

这种方法好吗?

0 投票
2 回答
2563 浏览

java - 如何创建 Java 地图用不可修改的键?

在java中,我应该如何创建一个Map<String,String>具有不可修改键的,同时保持值可修改。

我想Map<String,String>通过一个界面将其交给其他人添加/更改 Map 值,但不能更改 Map 键。

更高级别问题的背景是我有变量名列表/集(具有树状结构)(表示为 java 字符串),我希望 java 接口另一侧的代码能够填充别名(也字符串)用于每个变量名称。我想有这个接口的多个实现,所以命名树层次结构可以是别名不同的方式来适应不同的情况。让接口实现填充Map<String,String>一堆已经设置好的键(并且可能包含值的默认值)并允许它修改值(但不是键),似乎是最好的方法。我正在创建名称和别名之间的映射,所以Map<>很有意义。

回到较低层次的问题。我希望我的代码类似于:

我知道有,Collections unmodifiableMap(Map<> m)但这也使值不可修改。如果我的值是可变对象,那么我可以修改它们,但我想坚持使用Strings(避免使用 set/get 为单个字符串成员创建类,或使用公共字符串成员创建类结构类)。

AKA,我想避免创建我自己的可变类值,并用于Collections unmodifiableMap()使键和value references不可修改:

我可以扩展或实现我自己的 Map,然后(比如如何Collections unmodifiableMap())覆盖所有可以更改键 throw 的方法UnsupportedOperationException。但是在 Java 8 中,已经添加了大量使用 Lambda 函数的方法,这对于接口实现者来说是很好的,只要他们不能更改键即可。

AKA,我想避免这种冗长且容易出错的技术:

是否存在仅允许更改值的数据的接口Maps<>

我还有什么其他选择可以创建类似于 aMap<String,String>的具有不可修改键可修改值的东西?如果可能的话,我对良好的编码实践感兴趣。

0 投票
2 回答
162 浏览

java - Collections.unmodifiableMap 可以保留原图吗?

我在下面有一段代码:

MY_MAP 可以始终保留 tmpMap 吗?或者换句话说,GC 是否有可能回收 tmpMap 导致 MY_MAP 无法访问?

0 投票
1 回答
200 浏览

c++ - 指针在 Visual Studio 2013 中被视为不可修改的左值

获取节点():

节点交换代码:

我正在为我的计算机科学课做一个项目,几天后就到期了。我想使用相当简单的快速排序对链接列表进行排序,但是在交换列表中的节点时我一直在努力解决一个奇怪的问题。作为参考,getNode() 函数返回列表中某个索引处的节点,这些节点包含指向吉他对象的指针以及下一个节点指针。我已经试验了几个小时,我发现像这样的行,“list.getNode(h).element = temp.element;” 是说指向列表中节点中吉他对象的指针被分配了临时对象中指针的值。这通常可以工作,但此时我收到一个错误,指出左侧不是可修改的左值。但是,我可以创建一个指针并将其放在赋值运算符的左侧,而不会出现任何错误。另外,当我在前面使用解引用运算符(*)时,左侧没有错误,但这并没有成功交换节点。我肯定错过了什么。

0 投票
1 回答
369 浏览

java - UnmodifiableMap 带函数值无法编译

我有一个参考:

我初始化如下:

在静态块的最后一行(分配给 DELEGATES),我得到这个编译器错误:

错误:(64、48)java:不兼容的类型:不存在类型变量 K、V 的实例,因此 java.util.Map 符合 java.util.LinkedHashMap>

我在搞砸什么吗?还是不可修改的视图不喜欢函数类型?

0 投票
3 回答
2092 浏览

java - 投射不可修改的集合

我有一个无法转换的 java.lang.Object。调试时,我注意到 Object 是一个不可修改的集合,所以我尝试将它转换为一个集合,但没有奏效(ClassCastException)。相反,我尝试了

但当然这也是不可能的,因为 HashSet 没有这样的构造函数。

我将如何解决这个问题?

0 投票
2 回答
579 浏览

java - 我不能在 GWT Collections.unmodifiableList(List l) 中使用只能读取我的列表,因为不是可序列化的替代方法吗?

我正在使用 GWT-RPC 创建应用程序。在某些时候,服务器使用 Collections.unmodifiableList(List l) 返回一个 Collection 给客户端。客户端报错:

所以,我需要一种替代方法来获得唯一可读的集合,我该怎么做?非常感谢

我的代码如下:

0 投票
1 回答
2345 浏览

java - 为什么我的 `unmodifiableList` 是可修改的?

我想要一个List不能删除或添加其元素的元素。我以为我在 Java 8 中使用Collections.unmodifiableList找到了答案。我传递了我的原始列表并取回了一个假定不可修改的列表。

然而,当我从原始列表中删除一个元素时,我的不可修改列表被修改了。到底是怎么回事?

请参阅此演示代码。从原始列表中删除时,我的不可修改列表从 3 个元素 2 缩小。