Существуют ли собственные классы коллекции JAVA, расширяющие List, которые не допускают нулевые элементы? - PullRequest
7 голосов
/ 29 июня 2010

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

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

Я просто пытался представить реализацию List, которая не допускает нулевые значения, и я не знаю ни о чем.Например, у меня может быть ArrayList<Double>, но он допускает нулевые значения.

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

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

Ответы [ 5 ]

5 голосов
/ 29 июня 2010

Не все реализации List <...> допускают, чтобы элементы были нулевыми.

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

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

5 голосов
/ 29 июня 2010

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

2 голосов
/ 29 июня 2010

Guava 's ImmutableList запрещает ноль, но возвращает false на contains(null).

1 голос
/ 29 июня 2010

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

1 голос
/ 29 июня 2010

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

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

--- Исходная запись следует ---

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...