要无效检查或不进行空检查?

时间:2013-09-29 20:20:36

标签: java nullpointerexception effective-java

这是由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的任何null 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函数进行空检查?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

Object[] a = c.toArray();显然会抛出NPE。在这种情况下我要做的是,如果param为null,则在开头检查,然后返回 false (因此它不会破坏运行时流 - Objective-C样式),或{ {1}}在方法的开头,并在javadoc中指定它(例如“事物不能为空,哟”)。

但那只是我。这就是API必须始终记录良好的原因。