Есть ли собственные классы набора JAVA, которые расширяют Список, которые не позволяют пустые элементы?

Согласно документации, List.contains может бросить NullPointerException в этом сценарии:

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

Я просто пытался думать о Реализации списка, которая не позволяет, аннулирует, хотя, и я не знаю ни о ком. Например, я могу иметь ArrayList, но это позволяет, аннулирует.

    List list = new ArrayList();
    if (list.contains(null)) { // this won't throw NPE            
    }

Так документация, здесь относящаяся к пользовательским реализациям этого интерфейса, или там некоторые собственные классы набора JAVA, которые расширяются List это не позволяет пустые элементы? Я понимаю, что исключение является дополнительным, я просто пытался думать о случае реального мира, где это могло произойти.

7
задан blahdiblah 2 June 2015 в 18:31
поделиться

5 ответов

Не все реализации List <.. .> разрешить элементам быть нулевыми.

Примером является RoleList :: add (role) , который вызывает исключение при добавлении значения Null.

Эта документация подготовит вас к такой встрече, побуждая вас проверить документацию любого списка, с которым вы работаете, чтобы увидеть, вызывает ли это беспокойство, или проявить осторожность, если вы не можете его проверить. Отслеживание NPE - не забава. Знание документации (при наличии хорошей документации) может избавить от многих головных болей.

5
ответ дан 6 December 2019 в 15:18
поделиться

Это относится к настраиваемым реализациям до того дня, когда одна из реализаций Java List не разрешит null, а затем будет относиться и к этому.

5
ответ дан 6 December 2019 в 15:18
поделиться

A CheckedList будет примером списка в стандартном API, который не поддерживает нули.

1
ответ дан 6 December 2019 в 15:18
поделиться

--- Сообщение отредактировано в ответ на комментарии ---

В основном, причина, по которой оно там находится, заключается в том, чтобы напомнить вам о необходимости поймать NullPointerExcepton, поскольку разработчики интерфейса List предполагали, что списки могут сообщать о любом null доступе как об ошибке.

--- Original Post Follows ---

Те, что предоставляются стандартными библиотеками Java, поддерживают null, но нет никаких ограничений на создание класса, реализующего java.util.List, который не поддерживает nullы.

Если список не поддерживает null, то проверка на null эквивалентна ошибке, поэтому исключение может иметь смысл в зависимости от того, кто реализовал List. Вот почему интерфейс должен упоминать проверяемое исключение; потому что, если бы этого не было, то вы не смогли бы выбросить NullPointerException из подкласса, если бы захотели убедиться, что никто не касался списка с null.

1
ответ дан 6 December 2019 в 15:18
поделиться

Guava's ImmutableList disallows null, but it returns false on contains(null).

2
ответ дан 6 December 2019 в 15:18
поделиться
Другие вопросы по тегам:

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