Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建和强制转换对象数组时出错_Java_Arrays - Fatal编程技术网

Java 创建和强制转换对象数组时出错

Java 创建和强制转换对象数组时出错,java,arrays,Java,Arrays,我试图创建一个迭代器,在其中创建一个对象数组。我必须键入cast,因为不允许创建泛型数组 我得到一个运行时错误 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LRandomizedQueueList$Node; 迭代器的完整代码如下所示。我不知道我做错了什么 private class RandomizedQueueIterator implements Iterator<Item>

我试图创建一个迭代器,在其中创建一个对象数组。我必须键入cast,因为不允许创建泛型数组

我得到一个运行时错误

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中的一个类。