节点对象通用数组的转换问题

Casting Issue for Generic Array of Node Objects

我在创建 java 通用数组时遇到问题,我需要创建一个 Node 类型的数组。

所以,我这样做是为了声明:

private Node<E> [] nodes; 之后进行初始化,nodes = (Node<E>[]) new Node [values.length];

当我尝试设置节点对象的属性值 nodes[i].setValue(values[i]); 时,我得到 NullPointerException,这意味着我的节点数组设置有问题。

我做错了什么?是转换不正确的结果,还是我的代码中的其他原因?

在Java中,初始化数组时,默认情况下,数组中的对象一开始都会被设置为null。所以当你调用 nodes = (Node<E>[]) new Node [values.length] 时,虽然你正在创建一个节点数组,但它们最初都设置为 null。为了解决这个问题,您需要使用 for 循环手动构造数组中的每个节点,即

for (int i = 0; i < values.length; i++) {
    nodes[i] = new Node();
}