Dán*_*gyi 6 java collections immutability
coll.contains(null)前面的问题:为什么在 Java 中对 ImmutableCollections 的调用会失败?
我知道,不可变集合不能包含空元素,我不想讨论这是好是坏。
但是,当我编写一个需要一个(一般的,非显式不可变的)集合的函数时,它在检查空值时失败。为什么实现不返回 false(这实际上是“正确”答案)?
Collection一般来说,我如何正确检查 a 中的空值?
编辑:
经过一些讨论(感谢评论者!)我意识到,我混淆了两件事:番石榴库中的ImmutableCollection和java.util.List.of返回的 List ,是 ImmutableCollections 中的某个类。然而,这两个类都会在 上抛出 NPE .contains(null)。
我的问题在于List.of结果,但从技术上讲,番石榴实施也会发生同样的情况。[编辑:事实并非如此]
Kev*_*ion 14
看到这样的讨论我很心疼!
自从我写出第一个最终成为番石榴的集合之前,这样做的集合一直是我最讨厌的。如果您发现任何 Guava 集合仅仅因为您问了一个完全无辜的问题(例如 )而抛出 NPE .contains(null),请提交错误!我们讨厌那些废话。
编辑:我非常苦恼,以至于我不得不回去查看 2007 年首次创建 ImmutableSet 的变更列表,并看到了这样的内容:
@Override public boolean contains(@Nullable Object target) {
if (target == null) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
啊啊啊。