Резюме в значительной степени говорит обо всем. Здесь соответствующий фрагмент кода в ImmutableList.createFromIterable():
if (element == null) {
throw new NullPointerException("at index " + index);
}
Я сталкивался с этим несколько раз и не могу понять, почему функция общего назначения должна налагать это ограничение.
Изменить 1: "общим назначением", я был бы доволен 95% случаев. Но я не думаю, что я написал 100 звонков на ImmutableList.of(), но их уже укусил не один раз. Может быть, я - странник.:)
Изменить 2: Я полагаю, моя большая жалоба заключается в том, что это создает "икоту" при взаимодействии со стандартными коллекциями java.util. Как вы указали в своем выступлении, проблемы с null в коллекциях могут отображаться далеко от того места, где были вставлены эти нули. Но если у меня длинная цепочка кода, которая ставит нули в стандартную коллекцию на одном конце и правильно обрабатывает ее на другом, то я не могу заменить класс коллекций google в любой момент на этом пути, потому что это немедленно throw a NullPointerException.