Почему ImmutableList.of () и его друзья запрещают нулевые элементы? - PullRequest
39 голосов
/ 12 февраля 2010

Резюме в значительной степени говорит обо всем. Вот соответствующий фрагмент кода в ImmutableList.createFromIterable():

  if (element == null) {
    throw new NullPointerException("at index " + index);
  }

Я сталкивался с этим несколько раз и не понимаю, почему библиотечная функция общего назначения должна накладывать это ограничение.

Редактировать 1: «общего назначения», я был бы счастлив в 95% случаев. Но я не думаю, что написал 100 звонков на номер ImmutableList.of(), и это меня укусило уже не раз. Может быть, я посторонний, хотя. :)

Редактировать 2: Я думаю, моя большая жалоба состоит в том, что это создает «сбой» при взаимодействии со стандартными коллекциями java.util. Как вы указали в своем выступлении, проблемы с null s в коллекциях могут обнаруживаться далеко от места вставки этих нулей. Но если у меня есть длинная цепочка кода, которая помещает пустые значения в стандартную коллекцию на одном конце и обрабатывает их правильно на другом, тогда я не смогу заменить класс коллекций Google в любой момент на этом пути, потому что он немедленно бросить NullPointerException.

Ответы [ 3 ]

35 голосов
/ 12 февраля 2010

Я объяснил это в 25-минутной точке этого видео: http://www.youtube.com/watch?v=ZeO_J2OcHYM

Извините за ленивый ответ, но это, в конце концов, только вопрос "почему" (возможно, не подходит для StackOverflow?).

РЕДАКТИРОВАТЬ: Вот еще один момент, я не уверен, что я ясно показал в видео: общий (по всему миру код Java), количество дополнительного кода, который должен быть написан для этих нулевых удобные случаи использования старого standbys Collections.unmodifiableList(Arrays.asList(...)) и т. д. перегружены общим (по всему Java-коду) количеством дополнительных checkArgument(!foos.contains(null)) вызовов, которые нужно будет добавить всем, если наши коллекции не позаботятся об этом для вы. Большинство, по мнению FAR, при использовании коллекции не ожидают наличия каких-либо нулевых значений, и действительно должны быстро завершаться неудачей, если таковые имеются.

7 голосов
/ 12 февраля 2010

Обычно в Google Collections разработчики относятся к группе, которая не считает, что нулевые значения должны быть ожидаемым параметром общего назначения.

0 голосов
/ 12 февраля 2010

Одна из причин заключается в том, что функциям, работающим со списком, не нужно проверять каждый элемент на наличие значения Null, что значительно повышает производительность.

...