Java 创建和强制转换对象数组时出错
我试图创建一个迭代器,在其中创建一个对象数组。我必须键入cast,因为不允许创建泛型数组 我得到一个运行时错误Java 创建和强制转换对象数组时出错,java,arrays,Java,Arrays,我试图创建一个迭代器,在其中创建一个对象数组。我必须键入cast,因为不允许创建泛型数组 我得到一个运行时错误 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LRandomizedQueueList$Node; 迭代器的完整代码如下所示。我不知道我做错了什么 private class RandomizedQueueIterator implements Iterator<Item>
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");
}
}
私有类RandomizedQueueIterator实现迭代器{
私有节点电流=第一;
私有节点[]ca=(节点[])新对象[size()];
//私有节点[]ca=新节点[size()];
私有随机化队列迭代器(){
如果(first==null)抛出新的NoSuchElementException();
对于(int j=0;j
我感谢您对理解此错误的帮助。请使用:
private Node[] ca = new Node[size()];
创建阵列时不需要强制转换阵列。您只需创建一个
节点数组
例外很明显:您不能将对象[]
强制转换为节点[]
<代码>对象[]不是节点[]
的子类
将代码替换为
private Node[] ca = new Node[size()];
为什么要将其创建为
新对象[size()]
?您只需执行newnote[size()]
…即可,因为我无法创建泛型数组。只能创建对象数组。如果我尝试创建新节点[size()],它会给我一个错误。这里的节点不是泛型类型。如异常消息所示,它是一个嵌套的RandomizedQueueList@RameshManian如果Node是泛型类型参数,则应在问题中明确说明。您发布的代码没有显示它。只发布了完整的迭代器类coddeThis在Java中是不允许的。给出了误差;错误:/Users/admin/algs4/assignment2/RandomizedQueueList.java:133:generic array creationEdit您的问题并发布一个完整的示例来重现问题。异常消息表明节点是RandomizedQueueList的嵌套类,而不是泛型类型。啊,我明白了。我没有意识到我不能创建节点数组,它实际上是RandomizedQueueList中的一个类。