代码之家  ›  专栏  ›  技术社区  ›  k314159

newSetFromMap布尔值的使用

  •  0
  • k314159  · 技术社区  · 4 年前

    这个 Collections.newSetFromMap 方法具有以下签名:

    public static <E> Set<E> newSetFromMap​(Map<E,​Boolean> map)
    

    布尔参数对映射的意义是什么?如果我只对 E 参数类型?

    0 回复  |  直到 4 年前
        1
  •  1
  •   MikeFHay    4 年前

    这条路 newSetFromMap 它的工作原理是使用提供的Map,并在其中添加一个虚拟值 add 。所有其他操作只需在地图的键集上操作。它碰巧使用了布尔值。TRUE作为虚拟值(参见 source ),所以输入类型 Map<E, Boolean> 这是类型安全所必需的。

    限制性类型也有助于鼓励正确使用,根据 docs :

    在调用此方法时,指定的映射必须为空, 并且在该方法返回后不应直接访问。这些 如果地图创建为空,直接传递给 如图所示,这种方法不会保留对地图的引用 在以下代码片段中:

    Set<Object> weakHashSet = Collections.newSetFromMap(
        new WeakHashMap<Object, Boolean>());
    

    如果该方法接受 Map<E, Object> 从理论上讲,很容易传入一个已经包含非布尔值的现有映射,这是不鼓励的,可能会导致令人惊讶的行为。

    所以,不,只要你按照文档中的规定正确使用方法,就没什么好担心的。