@Override
public boolean contains(Object o) {
Objects.requireNonNull(o); <- Why is this here?
return size > 0 && probe(o) >= 0;
}
这意味着人们不能接受任何
Set
对象(他们无法控制),而只需使用 .contains(null)
来检查集合是否包含空值。有些 Set
可以包含空值,因此这是一个合法的检查。
因为
SetN
不允许空元素。这不是一个公共类,因此没有记录,但这可以从 Set 的文档中推断出来。关于从 Set.of()
和 Set.copyOf()
返回的不可修改集的部分明确指出它们不允许空值:
他们不允许空元素。尝试使用 null 元素创建它们会导致 NullPointerException。
Set.contains(Object)
的文档指出,如果元素为 null 并且集合不允许为 null,则该方法会抛出 NPE:
NullPointerException - 如果指定的元素为 null 并且此集合不允许 null 元素
考虑到文档,
SetN.contains()
的这种实现是可以预期的。