Подтвердить что ты не робот

Почему ImmutableList.of() и друзья запрещают нулевые элементы?

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

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

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

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

Изменить 2: Я полагаю, моя большая жалоба заключается в том, что это создает "икоту" при взаимодействии со стандартными коллекциями java.util. Как вы указали в своем выступлении, проблемы с null в коллекциях могут отображаться далеко от того места, где были вставлены эти нули. Но если у меня длинная цепочка кода, которая ставит нули в стандартную коллекцию на одном конце и правильно обрабатывает ее на другом, то я не могу заменить класс коллекций google в любой момент на этом пути, потому что это немедленно throw a NullPointerException.

4b9b3361

Ответ 1

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

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

EDIT:. Здесь еще один момент, который я не уверен, что я ясно дал понять в видео: общая сумма (по всему миру Java-кода), количество дополнительного кода, который должен быть написан для этих null-friendly cases для использования старых standbys Collections.unmodifiableList(Arrays.asList(...)) и т.д. перегружены общим (по всему миру Java-кодом) количеством дополнительных checkArgument(!foos.contains(null)) вызовов, которые каждый должен будет добавить, если наши коллекции не позаботились об этом для тебя. Большинство, по FAR, обычаи коллекции не ожидают присутствия нулей, и на самом деле они должны быть быстрыми, если таковые имеются.

Ответ 2

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

Ответ 3

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