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

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

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

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

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

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

40
задан Matt McHenry 13 February 2010 в 01:25
поделиться

3 ответа

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

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

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

36
ответ дан 27 November 2019 в 01:53
поделиться
$('a.my-link').each(function () {
    var href = $(this).attr('href');
    $(this).attr('href', href + '&thisisadded=true');
});

Замените селектор на селектор jQuery, который будет соответствовать соответствующей ссылке на вашем сайте, если мой не является хорошим enought.

-121--4196094-

Пример сжатия LZW см. в http://rosettacode.org/wiki/LZW_compression#JavaScript . Он лучше всего работает на более длинных последовательностях с повторяющимися узорами.

Из статьи Википедии на LZW:

Словарь инициализирован, чтобы содержать односимвольные последовательности соответствует всем возможным входные символы (и больше ничего за исключением кодов clear и stop, если они используются). Алгоритм работает путем сканирования через вход последовательность последовательно длиннее подстроки, пока он не найдет подстроку, которая не в словаре. Когда такое последовательность найдена, индекс для строка меньше последнего символа (т. е. самая длинная подстрока, которая находится в словарь) извлекается из словарь и отправленные на вывод, и новая последовательность (включая последнюю символ) добавляется в словарь со следующим доступным кодом. Последний затем используется в качестве символа ввода следующая начальная точка для сканирования подстроки.

Таким образом, последовательно дольше последовательности зарегистрированы в словарь и доступен для последующее кодирование как одиночный выход значения. Алгоритм работает лучше всего данные с повторяющимися узорами, поэтому начальные части сообщения будут видеть небольшое сжатие. Как сообщение растет, однако степень сжатия имеет асимптотическую тенденцию к максимум.

-121--3375270-

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

7
ответ дан 27 November 2019 в 01:53
поделиться

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

0
ответ дан 27 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: