Ниже приведен фрагмент кода в java.Null pointer with iterator.next
Collection contextPages = (Collection) getContextPages();
Iterator contextPageIter = contextPages.iterator();
while (contextPageIter.hasNext()) {
Page contextPage = (Page) contextPageIter.next();
String result = contextPage.getResult(); // <-- Null pointer exception here
// Other stuff which this API does.
}
Этот код был в эксплуатации некоторое время. Но по какой-то причине мы нанесли нулевой указатель на String result = contextPage.getResult();
.
Так выглядит, хотя мы сделали чек на hasNext()
, метод next()
возвращает null
.
Одна из возможностей заключается в том, что сама коллекция имеет null
, но возможно ли, что этот код может привести к нулевому указателю в многопоточной среде?
Как правило, это не разрешено изменять коллекцию одновременно. Тем не менее, нет никакой гарантии, что это будет обнаружено в коллекции (хотя [оно попытается это сделать]] (https://stackoverflow.com/a/13549956/1392132)). Это поможет узнать точный класс 'contextPages'. – 5gon12eder
_Anything_ может произойти, если коллекция не является потокобезопасной, а один поток изменяет коллекцию, а другой поток использует Iterator для коллекции. У вас есть причина подозревать, что другой поток может использовать коллекцию одновременно? –