0

这是 Josh bloch 编写的代码(Linkedlist.java)

 * @throws NullPointerException if the specified collection is null
     */
    public boolean addAll(int index, Collection<? extends E> c) {
        checkPositionIndex(index);

        Object[] a = c.toArray();
        int numNew = a.length;
        if (numNew == 0)
            return false;

        Node<E> pred, succ;
        if (index == size) {
            succ = null;
            pred = last;
        } else {
            succ = node(index);
            pred = succ.prev;
        }

在这里,我没有看到 Collection c 的任何空 ptr 检查。相反有效的java非常强调参数验证,强调空指针检查。If an invalid parameter value is passed to a method and the method checks its parameters before execution, it will fail quickly and cleanly with an appropriate exception.

我需要知道我错过了什么?换句话说,他为什么不对 addAll 函数进行空值检查?

4

2 回答 2

3

因为Object[] a = c.toArray();无论如何都会抛出声明的异常,如果c为空。

于 2013-09-29T20:23:33.833 回答
1

Object[] a = c.toArray();显然会抛出NPE。在这种情况下我会做什么,要么在开始时检查参数是否为 null,然后返回false(因此它不会破坏运行时流程 - Objective-C 风格),或者assertIsNotNull在方法的开头,并且在 javadoc 中指定它(例如“事物不能为空,哟”)。

但这只是我。这就是为什么 API 必须始终有良好文档记录的原因。

于 2013-09-29T20:26:25.417 回答