尝试将对象添加到优先级队列时,我不断收到空指针异常
我初始化队列:
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.