是否存在扩展List的不允许null元素的本机JAVA集合类?

时间:2010-06-29 13:35:29

标签: java nullpointerexception

根据documentationList.contains可以在此方案中抛出NullPointerException

  

“如果指定的元素为null并且   此列表不支持null   元素(可选)。“

我只是想到一个不允许空值的List实现,但我不知道。例如,我可以拥有ArrayList<Double>,但它允许空值。

    List<Double> list = new ArrayList<Double>();
    if (list.contains(null)) { // this won't throw NPE            
    }

这里的文档是指这个接口的自定义实现,还是有一些扩展List的本地JAVA集合类不允许使用null元素?我意识到异常是可选的,我只是想到一个可能发生这种情况的真实案例。

5 个答案:

答案 0 :(得分:5)

它指的是自定义实现,直到其中一个Java List实现不允许为null,然后它也将引用它。

答案 1 :(得分:5)

并非List&lt; ...&gt;的所有实现允许元素为null。

一个例子是RoleList::add(role),它在添加Null值时抛出异常。

本文档为您做好准备,鼓励您检查您正在使用的任何列表的文档,以确定是否存在问题,或者如果您无法检查,则要小心谨慎。追踪NPE并不好玩。了解文档(提供良好的文档)可以避免很多麻烦。

答案 2 :(得分:2)

GuavaImmutableList不允许为null,但在contains(null)上返回false。

答案 3 :(得分:1)

---发表评论以回应评论---

基本上它的原因是提醒你抓住NullPointerExcepton,因为List接口的设计者设想了可能会将任何null访问报告为错误的列表。

---原帖后续---

标准Java库提供的支持null,但是创建一个不支持java.util.List的{​​{1}}的类没有限制。

如果列表不支持null,则检查null等同于错误,因此异常可能有意义,具体取决于实施null的人员。这就是接口必须提到已检查异常的原因;因为,如果没有,那么如果你想确保没有人用List触及列表,你就不能从子类中抛出NullPointerException

答案 4 :(得分:1)

CheckedList将是标准API中不支持空值的List的示例。