java - newSetFromMap 使用布尔值
问题描述
Collections.newSetFromMap方法具有以下签名:
public static <E> Set<E> newSetFromMap(Map<E,Boolean> map)
布尔参数对于地图的意义是什么?E
如果我只对参数类型感兴趣,是否需要关注?
解决方案
工作方式newSetFromMap
是它使用提供的 Map,并在其中放置一个虚拟值 on add
。所有其他操作都只是对地图的 keySet 进行操作。它碰巧使用 Boolean.TRUE 作为虚拟值(参见源代码),因此需要输入类型Map<E, Boolean>
才能使其类型安全。
根据文档,限制性类型还有助于鼓励正确使用:
调用此方法时指定的映射必须为空,并且不应在此方法返回后直接访问。如果地图创建为空,直接传递给此方法,并且不保留对地图的引用,则可以确保这些条件,如下面的代码片段所示:
Set<Object> weakHashSet = Collections.newSetFromMap( new WeakHashMap<Object, Boolean>());
如果该方法Map<E, Object>
在理论上接受 a ,则很容易传入已经包含非布尔值的现有映射,这是不鼓励的,并且可能导致令人惊讶的行为。
所以不,只要您正确使用文档中指定的方法,就没什么可担心的。
推荐阅读
- python - range() 用于计算带间隔的余额
- arrays - 如何使用种子对数组进行洗牌,从而在将其他项目添加到数组时元素序列保持一致
- c# - 重组 SQL 查询,但不显示元素
- android - 无法在颤动的WebView中访问gps坐标
- excel - Excel:如何从筛选功能中排除错误
- svg - 如何绘制带有点的响应式 SVG 路径?
- ios - 突出显示 MFMessageComposeViewController 中的 SEND 按钮
- html - 谷歌图片上的 data-iml 属性是什么?/ 如何检索谷歌图像相关分数?
- amazon-web-services - WSL2 中的 AWS CLI:“RequestTimeTooSkewed”
- amazon-web-services - 在云形成中将文件传递给 ec2