Нет, list.iterator() не может вернуть null. Он всегда будет возвращать объект класса, который имеет тип Iterable (реализующий интерфейс Iterable).
Даже в исходном коде: метод iterator()
возвращает новый итерируемый объект, используя новое ключевое слово, поэтому нет шансов на null. Ниже приведен код метода ArrayList класса итератора():
/**
* Returns an iterator over the elements in this list in proper sequence.
*
* <p>The returned iterator is <a href="#fail-fast"><i>fail-fast</i></a>.
*
* @return an iterator over the elements in this list in proper sequence
*/
public Iterator<E> iterator() {
return new Itr();
}
Здесь Itr is a inner class defined in ArrayList
сам класс. Я видел некоторые из реализаций List в исходном коде JDk, и я обнаружил, что везде, где было использовано новое ключевое слово, было возвращено объект-итератор, поэтому я считаю, что нет никакой нулевой проверки для list.iterator().
Даже когда я попытался следующий код в IntelliJ IDE я нашел в IDE информацию о том, что: «Condition 'iterator != null' is always 'true'
»
List<String> list = new ArrayList<>();
Iterator<String> iterator = list.iterator();
if(iterator != null) {
System.out.println("");
}
Я никогда бы не проверить нуль при возврате из list.iterator(). Конечно, нуль-проверка в списке может быть разумной. – Michal
Нет, мы не требуем этой проверки. Если он не указан в Javadoc, он не может вернуть значение null. Вы не можете идти тем, что «много раз люди [делали]». Это не демократия. Избыточный код всегда ошибочен. – EJP
Можете ли вы привести пример того, где кто-то использует эту проверку? На самом деле не имеет большого значения, что List возвращает null для итератора. – matt