这个 Collections.newSetFromMap 方法具有以下签名:
public static <E> Set<E> newSetFromMapâ(Map<E,âBoolean> map)
布尔参数对映射的意义是什么?如果我只对 E 参数类型?
E
这条路 newSetFromMap 它的工作原理是使用提供的Map,并在其中添加一个虚拟值 add 。所有其他操作只需在地图的键集上操作。它碰巧使用了布尔值。TRUE作为虚拟值(参见 source ),所以输入类型 Map<E, Boolean> 这是类型安全所必需的。
newSetFromMap
add
Map<E, Boolean>
限制性类型也有助于鼓励正确使用,根据 docs :
在调用此方法时,指定的映射必须为空, 并且在该方法返回后不应直接访问。这些 如果地图创建为空,直接传递给 如图所示,这种方法不会保留对地图的引用 在以下代码片段中: Set<Object> weakHashSet = Collections.newSetFromMap( new WeakHashMap<Object, Boolean>());
在调用此方法时,指定的映射必须为空, 并且在该方法返回后不应直接访问。这些 如果地图创建为空,直接传递给 如图所示,这种方法不会保留对地图的引用 在以下代码片段中:
Set<Object> weakHashSet = Collections.newSetFromMap( new WeakHashMap<Object, Boolean>());
如果该方法接受 Map<E, Object> 从理论上讲,很容易传入一个已经包含非布尔值的现有映射,这是不鼓励的,可能会导致令人惊讶的行为。
Map<E, Object>
所以,不,只要你按照文档中的规定正确使用方法,就没什么好担心的。