我正在尝试制作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];
有人可以告诉我我做错了什么,并帮助我解决这个问题吗?非常感谢您的时间。
编辑:似乎我对创建泛型数组与内部类数组感到困惑。 非常感谢您的回复。
您正在创建一个对象数组,然后尝试将它们转换为节点数组;您需要创建一个节点数组
尝试
private Node[] nd = new Node[100];
private Node[] nd = (Node[]) new Object[100];
它应该抛出ClassCastException
.无法将数组对象强制转换为Node
对象。
像 - 一样创建 -
Node[] nd = new Node[100];
private Node[] nd = (Node[]) new Object[100];
你为什么要这样做?
您显然将错误的对象强制转换为错误的引用类型。
该对象属于 Object[]
类型,您将其强制转换为 Node[]
,这将永远不起作用。
请改为执行此操作。
Node[] nd = new Node[size];
您正在创建一个对象数组并尝试将其转换为Node
数组。 不允许这种强制转换,因为对象不是Node
你可以做
Node[] nd = new Node[100];
如果您需要一组Node
或
Object[] nd = new Object[100];
如果您只需要一个对象数组
对于将来,您应该知道,通常当您得到ClassCastException
这意味着您在大小写无效时尝试将一个类强制转换为其他类,并且应该尝试了解对象的层次结构
你基本上需要: private Node[] nd = new Node[100];
因为数组本身就是对象,因为new Object[100]
会返回数组类的对象,所以你不能把它投射到其他类对象中,这里Node
。