为什么 SetN.contains 不允许空参数?

问题描述 投票:0回答:1

参考行:https://github.com/openjdk/jdk/blob/ec0618742ff6cfd6d83f1278e8d245673fb9ef2c/src/java.base/share/classes/java/util/ImmutableCollections.java#L946

    @Override
    public boolean contains(Object o) {
        Objects.requireNonNull(o);           <- Why is this here?
        return size > 0 && probe(o) >= 0;
    }

这意味着人们不能接受任何

Set
对象(他们无法控制),而只需使用
.contains(null)
来检查集合是否包含空值。有些
Set
可以包含空值,因此这是一个合法的检查。

java
1个回答
0
投票

因为

SetN
不允许空元素。这不是一个公共类,因此没有记录,但这可以从 Set 的文档中推断出来。关于从
Set.of()
Set.copyOf()
返回的不可修改集的部分明确指出它们不允许空值:

他们不允许空元素。尝试使用 null 元素创建它们会导致 NullPointerException。

同时,

Set.contains(Object)
的文档指出,如果元素为 null 并且集合不允许为 null,则该方法会抛出 NPE:

NullPointerException - 如果指定的元素为 null 并且此集合不允许 null 元素

考虑到文档,

SetN.contains()
的这种实现是可以预期的。

© www.soinside.com 2019 - 2024. All rights reserved.