我正在尝试创建一个迭代器,我在其中创建一个对象数组。我必须输入它们,因为不允许使用泛型数组。
我收到运行时错误
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LRandomizedQueueList$Node;
迭代器的完整代码如下所示。我不知道我做错了什么。
private class RandomizedQueueIterator implements Iterator<Item> {
private Node current = first;
private Node[] ca = (Node[])new Object[size()];
//private Node[] ca = new Node[size()];
private RandomizedQueueIterator() {
if (first == null) throw new NoSuchElementException();
for (int j = 0; j < size(); j++) {
ca[j] = current;
current = current.next;
}
StdRandom.shuffle(ca);
current = ca[0];
}
public boolean hasNext() { return current != null; }
public Item next() {
if (current == null) throw new NoSuchElementException();
Item item = current.item;
current = current.next;
return item;
}
public void remove() {
throw new UnsupportedOperationException("This method is not supported");
}
}
感谢您理解此错误的任何帮助。
答案 0 :(得分:1)
使用:
private Node[] ca = new Node[size()];
创建数组时无需强制转换数组。您只需创建一个Node
的数组。
答案 1 :(得分:1)
例外情况很明显:您无法将Object[]
强制转换为Node[]
。 Object[]
不是Node[]
的子类。
用
代替代码private Node[] ca = new Node[size()];