5

尝试将对象添加到优先级队列时,我不断收到空指针异常

我初始化队列:

private PriorityQueue<NodeObject> nodes;

在这里我尝试添加:

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

为什么这不起作用?我知道我的 NodeObject 不为空,因为我在添加它之前就创建了它。

4

3 回答 3

8

您还没有初始化队列。

nodes = new SomePriorityQueue();
于 2010-04-27T04:19:47.660 回答
4

问题是您忘记初始化优先队列nodes。将其更改为:

私有 PriorityQueue<NodeObject> 节点 = new PriorityQueue<NodeObject>();

或者在每个构造函数中显式分配nodes(如)。nodes = new PriorityQueue<NodeObject>();请记住,在 Java 中,任何不是原始类型的类型实际上都是隐式指针,因此虽然指针nodes已初始化为null,但它尚未初始化为指向某个对象。

于 2010-04-27T04:19:51.100 回答
2

您实际上并没有创建优先级队列;nodes == null. 当NullPointerException您尝试调用nodes.add.

解决此问题的方法是实际构造 aPriorityQueue<NodeObject>并将对它的引用分配给nodes. 您可以在声明中执行此操作,如下所示:

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

JLS 4.12.5 变量的初始值

  • 每个类变量、实例变量或数组组件在创建时都 使用默认值进行初始化:
    • 对于所有引用类型,默认值为null.
于 2010-04-27T04:20:36.880 回答