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

时间:2013-09-11 08:04:59

标签: java 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];

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

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

5 个答案:

答案 0 :(得分:2)

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

private Node[] nd = new Node[100];

答案 1 :(得分:1)

private Node[] nd = (Node[]) new Object[100];

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

创建喜欢 -

Node[] nd = new Node[100];

答案 2 :(得分:1)

private Node[] nd = (Node[]) new Object[100];

你为什么要这样做?

您显然是将错误的对象投射到错误的引用类型。

该对象的类型为Object[],您将其转换为Node[],这将永远不会有效。

改为做。

Node[] nd = new Node[size];

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

你可以做到

Node[] nd = new Node[100];

如果您需要Node

的数组
Object[] nd = new Object[100];

如果你只需要一个对象数组

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