Исключение нулевого указателя в улучшенном цикле for над вектором - PullRequest
2 голосов
/ 04 августа 2011

Как этот код может вызвать исключение нулевого указателя?

for (Foo f : Vector<Foo> v)
{
    f.doStuff(); // this line throws a NullPointerException
}

Даже если вектор пуст, разве внутренний блок просто никогда не должен выполняться?

Ответы [ 2 ]

10 голосов
/ 04 августа 2011

Vector не пусто. Как вы говорите, если бы это было так, тело цикла не было бы выполнено.

Если вы получаете NPE на этой линии, это означает, что один (или более) из элементов Vector равен null.


Я также должен отметить, что пример кода синтаксически некорректен. Вероятно, следует читать что-то вроде этого:

Vector<Foo> v = ...    
for (Foo f : v)
{
    f.doStuff(); // this line throws a NullPointerException
}
0 голосов
/ 04 августа 2011

Синтаксис, который вы показываете, неверен, вы не можете объявить переменную шага (Foo f) и коллекцию (Vector v) в цикле. Вы получите NullPointerException, если коллекция (v в вашем примере) равна нулю. Как отмечалось выше, вы также получите исключение NullPointerException, если коллекция содержит элемент с нулевым значением.

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