尝试将对象添加到优先级队列时,我不断收到空指针异常
我初始化队列:
private PriorityQueue<NodeObject> nodes;
在这里我尝试添加:
NodeObject childNode = new NodeObject(child, 1);
nodes.add(childNode);
为什么这不起作用?我知道我的 NodeObject 不为空,因为我在添加它之前就创建了它。
尝试将对象添加到优先级队列时,我不断收到空指针异常
我初始化队列:
private PriorityQueue<NodeObject> nodes;
在这里我尝试添加:
NodeObject childNode = new NodeObject(child, 1);
nodes.add(childNode);
为什么这不起作用?我知道我的 NodeObject 不为空,因为我在添加它之前就创建了它。
您还没有初始化队列。
nodes = new SomePriorityQueue();
问题是您忘记初始化优先队列nodes
。将其更改为:
私有 PriorityQueue<NodeObject> 节点 = new PriorityQueue<NodeObject>();
或者在每个构造函数中显式分配nodes
(如)。nodes = new PriorityQueue<NodeObject>();
请记住,在 Java 中,任何不是原始类型的类型实际上都是隐式指针,因此虽然指针nodes
已初始化为null
,但它尚未初始化为指向某个对象。
您实际上并没有创建优先级队列;nodes == null
. 当NullPointerException
您尝试调用nodes.add
.
解决此问题的方法是实际构造 aPriorityQueue<NodeObject>
并将对它的引用分配给nodes
. 您可以在声明中执行此操作,如下所示:
private PriorityQueue<NodeObject> nodes = new PriorityQueue<NodeObject>();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- 每个类变量、实例变量或数组组件在创建时都 使用默认值进行初始化:
- 对于所有引用类型,默认值为
null
.