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