gpt4 book ai didi

java - EnumSet.spliterator 没有特征 Spliterator.NONNULL

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:20:05 26 4
gpt4 key购买 nike

我在想问题的答案:How to test for null keys on any Java map implementation?

我的第一个想法是检查 map 键集的 Spliterator 是否具有特征 Spliterator.NONNULL:

map.keySet().spliterator().hasCharacteristics(Spliterator.NONNULL)

JavaDoc说:

Characteristic value signifying that the source guarantees that encountered elements will not be null. (This applies, for example, to most concurrent collections, queues, and maps.)

在回答之前我做了一些检查:

没有提供CompararatorTreeMapSpliterator 即使自然排序 也不具备此特性不允许空键。

new TreeMap<>().keySet().spliterator().hasCharacteristics(Spliterator.NONNULL); // false 

更令人惊讶的是 EnumMap 键集和 EnumSet 本身的 Spliterator 不具有此特性。

EnumSet.allOf(DayOfWeek.class).spliterator().hasCharacteristics(Spliterator.NONNULL); // false

我理解 spliterator().hasCharacteristics(Spliterator.NONNULL) 的结果在上述情况下返回 false 作为 Set.spliterator 的默认实现() 被评估。

但是,为什么这些集合的拆分器不覆盖 Set.spliterator() 以使用 Spliterator.NONNULL 创建 Spliterator 是有原因的吗>?这会破坏我不知道的规范吗?

最佳答案

更糟的是:

System.out.println(Set.of(1)
.spliterator()
.hasCharacteristics(Spliterator.NONNULL)); // false

即使这些 Set::of 方法被记录为:

throws NullPointerException if the element is null

所以没有办法在 Set 中以 null 结尾。我想真正的答案是这还没有完成

编辑

参见 comment from Stuart Marks about this

关于java - EnumSet.spliterator 没有特征 Spliterator.NONNULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276985/

26 4 0
文章推荐: java - ArrayList 如何在恒定时间内检索数据?
文章推荐: java - 在 AWS Lambda 中使用的 IoC(控制反转)Java 框架
文章推荐: java - 如何将 List> 添加到 Set 中?