在尝试创建内部类类型的数组时获取 ClassCastException



我正在尝试制作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

最新更新