Откуда происходит это исключение NullPointerException?

for(Node<T> neighbor : current.getAdjacentNodes()) {
    neighbor.setDistance(current.getDistance() + neighbor.getDistance());

    queue.add(neighbor);
}

Я получаю исключение NullPointerException из этого цикла for. Я действительно не знаю, как этого избежать. Я уже пытался спросить (если сосед == ноль) {перерыв}, но это тоже не работает.

Это мой класс. http://pastebin.com/hKMrG6h2

java.lang.NullPointerException
at src.Node.getDistance(Node.java:69)
at src.Dijkstra.populateDijkstraFrom(Dijkstra.java:35)
at DijkstraTest.TestCase1(DijkstraTest.java:34)

Dijkstra.java:35 мой цикл

[ОРИГИНАЛЬНЫЙ КОД] http://pastebin.com/k7Mu18YE
[КОД КЛАССА] http://pastebin.com/hKMrG6h2

1 ответ

Поле расстояния имеет тип Integer. Но получатель этого поля возвращает примитив int. Когда вы вызываете getter, а поле не инициализируется или имеет нулевое значение, оно выдаст NPE. Это потому, что JRE пытается распаковать тип Integer в примитив int. И вы не можете присвоить null для int.

Я прилагаю короткий код, который воспроизводит это поведение.

    public class Testy {

    static Integer v;

    public static void main(String[] args) {
        getDistance();
    }

    private static int getDistance()
    {
        return v;
    }
}
Другие вопросы по тегам