Согласно документации, List.contains
может бросить NullPointerException
в этом сценарии:
"если указанный элемент является пустым, и этот список не поддерживает пустые элементы (дополнительно)".
Я просто пытался думать о Реализации списка, которая не позволяет, аннулирует, хотя, и я не знаю ни о ком. Например, я могу иметь ArrayList
, но это позволяет, аннулирует.
List list = new ArrayList();
if (list.contains(null)) { // this won't throw NPE
}
Так документация, здесь относящаяся к пользовательским реализациям этого интерфейса, или там некоторые собственные классы набора JAVA, которые расширяются List
это не позволяет пустые элементы? Я понимаю, что исключение является дополнительным, я просто пытался думать о случае реального мира, где это могло произойти.
Не все реализации List <.. .> разрешить элементам быть нулевыми.
Примером является RoleList :: add (role)
, который вызывает исключение при добавлении значения Null.
Эта документация подготовит вас к такой встрече, побуждая вас проверить документацию любого списка, с которым вы работаете, чтобы увидеть, вызывает ли это беспокойство, или проявить осторожность, если вы не можете его проверить. Отслеживание NPE - не забава. Знание документации (при наличии хорошей документации) может избавить от многих головных болей.
Это относится к настраиваемым реализациям до того дня, когда одна из реализаций Java List не разрешит null, а затем будет относиться и к этому.
A CheckedList будет примером списка в стандартном API, который не поддерживает нули.
--- Сообщение отредактировано в ответ на комментарии ---
В основном, причина, по которой оно там находится, заключается в том, чтобы напомнить вам о необходимости поймать NullPointerExcepton
, поскольку разработчики интерфейса List
предполагали, что списки могут сообщать о любом null
доступе как об ошибке.
--- Original Post Follows ---
Те, что предоставляются стандартными библиотеками Java, поддерживают null, но нет никаких ограничений на создание класса, реализующего java.util.List
, который не поддерживает null
ы.
Если список не поддерживает null
, то проверка на null
эквивалентна ошибке, поэтому исключение может иметь смысл в зависимости от того, кто реализовал List
. Вот почему интерфейс должен упоминать проверяемое исключение; потому что, если бы этого не было, то вы не смогли бы выбросить NullPointerException
из подкласса, если бы захотели убедиться, что никто не касался списка с null
.
Guava's ImmutableList
disallows null, but it returns false on contains(null)
.