2013-09-29 1 views
0

Вот код, автором которого Джош Блох (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; 
     } 

Здесь я не вижу никакой проверки нулевой 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?

ответ

3

Потому что Object[] a = c.toArray(); в любом случае выбросит указанное исключение, если c - null.

1

Object[] a = c.toArray();, очевидно, будет бросать NPE. То, что я сделал бы в этом случае, будет либо проверяться в начале, если параметр имеет значение null, а затем возвращает false (так что он не нарушает поток выполнения - Objective-C style), OR assertIsNotNull в начале метод и указать его в javadoc (например, «вещь не должна быть нулевой, yo»).

Но это только я. Вот почему API всегда должны быть хорошо документированы.