为什么ImmutableList.of()和朋友禁止null元素?
-
20-09-2019 - |
题
摘要几乎说明了一切。下面是在代码ImmutableList.createFromIterable()
相关片段:
if (element == null) {
throw new NullPointerException("at index " + index);
}
我碰到的这几次,不能明白为什么一个通用的库函数应该强加此限制。
修改1:通过“通用”,我很高兴与95%的病例。但我不认为我已经写了100个电话又ImmutableList.of()
,并通过其再次被咬伤。也许我是一个局外人,虽然。 :)
编辑2:我想我的大的抱怨是,这将创建一个“打嗝”标准java.util
集合互动时。正如你在你的演讲中指出,在收藏与null
s问题都可以显示出来远离这些地方空值插入。但是,如果我有代码的长链,在其他的一端放在一个标准的收集空值和处理它们正确,那么我无法在沿途的任何点来替代谷歌的集合类,因为它会立即抛出NullPointerException
。
解决方案
我在该视频的25分钟的点说明如下: http://www.youtube.com/watch?v=ZeO_J2OcHYM
对不起,我懒的答案,但是这毕竟只是一个“为什么”的问题(可以说是不恰当的计算器?)。
编辑:这里的另一点,我不知道我在视频中明确:总(横跨世界上所有的Java代码的),额外的代码量为那些被写入空友好的情况下才使用旧备用Collections.unmodifiableList(Arrays.asList(...))
等是由总(横跨世界上所有的Java代码)不堪重负额外checkArgument(!foos.contains(null))
的数额的话费每个人都需要增加,如果我们的产品系列并没有照顾,对你。大多数情况下,到目前为止,收集的用途不希望任何空到场,并且确实应该快速失败如果有任何。
其他提示
在一般在谷歌集合开发是不认为空值应该是一个预期的通用参数的组的
的一个原因是,它允许该列表上的功函数不具有检查null每个元素,显著提高了性能。