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

StackOverflow https://stackoverflow.com/questions/2252261

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top