NullPointerException при попытке добавить объект в PriorityQueue - PullRequest
3 голосов
/ 27 апреля 2010

я получаю исключение нулевого указателя при попытке добавить объект в приоритетную очередь

я инициализирую очередь:

private PriorityQueue<NodeObject> nodes;

и вот я пытаюсь добавить к нему:

NodeObject childNode = new NodeObject(child, 1);
nodes.add(childNode);

почему это не работает? я знаю, что мой NodeObject не является нулевым, потому что я создаю его прямо перед тем, как добавить его.

Ответы [ 3 ]

6 голосов
/ 27 апреля 2010

Вы не инициализировали очередь.

nodes = new SomePriorityQueue();
3 голосов
/ 27 апреля 2010

Проблема в том, что вы забыли инициализировать приоритетную очередь nodes. Измените его на:

private PriorityQueue<NodeObject> nodes = new PriorityQueue<NodeObject>();

Или явно выделите nodes (как в nodes = new PriorityQueue<NodeObject>();) в каждом из ваших конструкторов. Помните, что в Java любой тип, который не является примитивом, на самом деле является неявным указателем, поэтому, хотя указатель nodes был инициализирован в null, он не был инициализирован, чтобы указывать на что-либо.

1 голос
/ 27 апреля 2010

Вы на самом деле не создали приоритетную очередь; nodes == null. Это приводит к выбрасыванию NullPointerException при попытке вызвать nodes.add.

Способ исправить это путем создания PriorityQueue<NodeObject> и присвоения ссылки на него nodes. Вы можете сделать это в декларации следующим образом:

private PriorityQueue<NodeObject> nodes = new PriorityQueue<NodeObject>();
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

JLS 4.12.5 Начальные значения переменных

  • Каждая переменная класса, переменная экземпляра или компонент массива инициализируется значением по умолчанию при создании:
    • Для всех ссылочных типов значением по умолчанию является null.
...