尝试创建节点数组时出现以下错误:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LSkipList$Node;
这是我的代码:
public class Node {
Key key;
Value val;
Node[] next;
//constructor
public Node(Key k, Value v) {
key = k;
val = v;
next = (Node[])new Object[MAX_LEVEL];
}
}
最佳答案
这个:
new Object[MAX_LEVEL]
表示“类型为 Object[]
且大小为 MAX_LEVEL
的新数组,其中每个元素均为 null
”。
这个:
(Node[])new Object[MAX_LEVEL]
意思相同,加上“但检查它是否具有类型Node[]
;如果没有,则引发ClassCastException
”。但这是多余的,因为您刚刚创建了 Object[]
类型的数组,因此您知道它没有 Node[]
类型。所以它总是会引发ClassCastException
。
相反,你需要这样写:
new Node[MAX_LEVEL]
这意味着“一个类型为Node[]
、大小为MAX_LEVEL
的新数组,其中每个元素都是null
”。
关于java - 无法创建节点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53678542/