如何解决这个JDK限制?

时间:2011-08-09 13:46:18

标签: java collections null

我正在寻找Java Collection Framework中不允许使用null元素的类。

你知道吗?

7 个答案:

答案 0 :(得分:47)

使用Constraints

import com.google.common.collect.Constraints;
...
Constraints.constrainedList(new ArrayList(), Constraints.notNull())

来自Guava以获得最大的灵活性。

更新:番石榴约束已在Release 15中弃用 - 显然没有替代。

更新2:截至目前(Guava 19.0-rc2)Constrains仍在那里,不再弃用了。但是,Javadoc中缺少它。

我担心Javadoc是正确的MapConstraint已被Release 19弃用

答案 1 :(得分:20)

大多数Queue实施(LinkedList除外)都不接受null

EnumSet是一种特殊用途Set实施,不允许null值。

答案 2 :(得分:12)

有这样的集合here的综述。

答案 3 :(得分:12)

Apache Commons Framework - CollectionUtils.addIgnoreNull

如果myObj不为null,则添加到myList。

org.apache.commons.collections.CollectionUtils.addIgnoreNull(myList, myObj)

答案 4 :(得分:4)

使用Google Guava Predicates(@Joachim Sauer的答案已被弃用)

//list is the variable where we want to remove null elements
List nullRemovedList=Lists.newArrayList(Iterables.filter(list, Predicates.notNull()));

//Or convert to Immutable list
List nullRemovedList2=ImmutableList.copyOf(Iterables.filter(list, Predicates.notNull()));

答案 5 :(得分:1)

Hashtable不允许使用null键或值。

答案 6 :(得分:1)

开始here, the Collections API Page。查看“另请参阅”部分。点击链接。允许或禁止 null 的决定由实现类决定;只需按照各种“另请参见”部分中的链接访问实现类(例如,HashMap),然后查看插入方法(通常是添加,推送或放置的变体),以查看该实现是否允许