2

我正在尝试制作 Deque 的链表表示,链表的每个节点都由内部类的实例定义Node,但我得到了这个:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LRandomizedQueue$Node;

我不知道如何解决这个问题。这就是我所拥有的:

private class Node {
        Item item;
        Node next;
        Node prev;
    }

    @SuppressWarnings("unchecked")
    private Node[] nd = (Node[]) new Object[100];

有人可以告诉我我做错了什么,并帮我解决这个问题吗?非常感谢您的时间。

编辑:似乎我对创建通用数组和内部类数组感到困惑。非常感谢您的回复。

4

5 回答 5

2

您正在创建一个对象数组,然后尝试将它们转换为一个节点数组;你需要创建一个节点数组

尝试

private Node[] nd = new Node[100];
于 2013-09-11T08:06:51.147 回答
1
private Node[] nd = (Node[]) new Object[100];

它应该抛出ClassCastException。无法将数组对象转换为Node对象。

创建像 -

Node[] nd = new Node[100];
于 2013-09-11T08:08:17.887 回答
1
private Node[] nd = (Node[]) new Object[100];

你为什么要这样做?

您显然将错误的对象转换为错误的引用类型。

该对象是 typeObject[]并且您将其强制转换为Node[],这将永远无法正常工作。

改为这样做。

Node[] nd = new Node[size];
于 2013-09-11T08:08:43.617 回答
0

你基本上需要:private Node[] nd = new Node[100];

因为数组本身就是对象,所以new Object[100]会返回一个数组类的对象,你不能将它转换成其他的类对象,这里是Node.

于 2013-09-11T08:10:07.640 回答
0

您正在创建一个对象数组并尝试将其转换为Node数组。不允许这种类型的转换,因为对象不是Node

你可以做

Node[] nd = new Node[100];

如果你需要一个数组Node

Object[] nd = new Object[100];

如果您只需要一组对象

对于未来,您应该知道,通常当您得到ClassCastException这意味着您尝试在案例无效时将一个类转换为其他类,并且应该尝试了解对象的层次结构

于 2013-09-11T08:12:20.430 回答