是否有标准的 Java List 实现不允许向其添加 null?

2022-09-01 05:57:46

假设我有一个,我知道我永远不想添加它。如果我向它添加空值,则意味着我犯了一个错误。因此,每次我打电话时,我都会打电话。有没有一个现有的类(也许在Apache Commons或其他东西中)为我做这件事?Listnulllist.add(item)if (item == null) throw SomeException(); else list.add(item);List

类似的问题:帮助程序删除Java列表中的空引用?但我不想删除所有空值,我想确保它们永远不会被添加到第一位。


答案 1

注意 - 这里的几个答案声称通过包装列表并签入和来解决您的问题,但是他们忘记了您也可以通过其添加到。正确列出约束列表是具有挑战性的,这就是为什么番石榴必须为您做到这一点的原因。addaddAllListlistIteratorConstraints.constrainedList

但在查看之前,请先考虑您是否只需要一个不可变的列表,在这种情况下,Guava's无论如何都会为您进行空检查。而且,如果您可以使用JDK的某个实现,那也将这样做。ImmutableListQueue

(空敌对集合的良好列表:https://github.com/google/guava/wiki/LivingWithNullHostileCollections)


答案 2

使用Apache Commons Collection:

ListUtils.predicatedList(new ArrayList(), PredicateUtils.notNullPredicate());

将 null 添加到此列表将引发 。此外,您可以通过您喜欢的任何List实现来支持它,如有必要,您可以添加更多要检查的谓词。IllegalArgumentException

一般而言,集合也存在这种情况。

使用谷歌番石榴:

Constraints.constrainedList(new ArrayList(), Constraints.notNull())

将 null 添加到此列表将引发 。NullPointerException