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

时间:2014-10-19 06:40:12

标签: java arrays

我正在尝试创建一个迭代器,我在其中创建一个对象数组。我必须输入它们,因为不允许使用泛型数组。

我收到运行时错误

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");
       }
   } 

感谢您理解此错误的任何帮助。

2 个答案:

答案 0 :(得分:1)

使用:

private Node[] ca = new Node[size()];

创建数组时无需强制转换数组。您只需创建一个Node的数组。

答案 1 :(得分:1)

例外情况很明显:您无法将Object[]强制转换为Node[]Object[]不是Node[]的子类。

代替代码
private Node[] ca = new Node[size()];