这是由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函数进行空检查?
答案 0 :(得分:3)
因为Object[] a = c.toArray();
无论如何都会抛出声明的异常,如果c
为空。
答案 1 :(得分:1)
Object[] a = c.toArray();
显然会抛出NPE。在这种情况下我要做的是,如果param为null,则在开头检查,然后返回 false (因此它不会破坏运行时流 - Objective-C样式),或{ {1}}在方法的开头,并在javadoc中指定它(例如“事物不能为空,哟”)。
但那只是我。这就是API必须始终记录良好的原因。