代码之家  ›  专栏  ›  技术社区  ›  dcp

有没有扩展不允许空元素的List的原生JAVA集合类?

  •  7
  • dcp  · 技术社区  · 14 年前

    根据 documentation , List.contains 能扔吗 NullPointerException

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

    ArrayList<Double> ,但它允许空值。

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

    那么,这里的文档是指这个接口的自定义实现,还是有一些本机JAVA集合类可以扩展 List 不允许空元素?我意识到这个例外是可选的,我只是在想一个现实世界中可能发生这种情况的案例。

    5 回复  |  直到 9 年前
        1
  •  5
  •   Basil Bourque    9 年前

    并非List<的所有实现&燃气轮机;允许元素为空。

    一个例子是 RoleList::add(role)

    这篇文档为你的遭遇做了准备,鼓励你检查你正在处理的任何列表的文档,看看它是否是一个问题,或者如果你无法检查它,就在谨慎的一边犯错。追踪NPE并不有趣。了解文档(只要有好的文档存在)可以省去很多麻烦。

        2
  •  5
  •   Christoffer Hammarström    14 年前

    它指的是定制实现,直到某个Java列表实现不允许null的那一天,然后它也会指这个。

        3
  •  2
  •   ColinD    14 年前

    Guava ImmutableList 不允许null,但在上返回false contains(null) .

        4
  •  1
  •   Edwin Buck    14 年前

    ---回复评论后编辑---

    NullPointerExcepton List 接口设想的列表可能会报告任何 null 作为错误访问。

    标准Java库提供的类支持null,但是对创建实现null的类没有限制 java.util.List 这不支持 无效的 s。

    如果列表不支持 无效的 ,然后检查 无效的 相当于一个错误,因此根据谁实现了 . 这就是为什么接口必须提到选中的异常;因为,如果没有,那你就不能扔 NullPointerException 无效的 .

        5
  •  1
  •   Yishai    14 年前

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