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];

なぜこれを行うのですか?

明らかに間違ったオブジェクトを間違った参照型にキャストしています。

オブジェクトは 型Object[]であり、それを にキャストしようとしていますが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配列にキャストしようとしています。object はオブジェクトではないため、この種のキャストは許可されませんNode

できるよ

Node[] nd = new Node[100];

Nodeまたはの配列が必要な場合

Object[] nd = new Object[100];

オブジェクトの配列だけが必要な場合

将来のために、通常ClassCastException、ケースが無効なときにクラスを他のクラスにキャストしようとしたことを意味することを知っておく必要があり、オブジェクトの階層を理解しようとする必要があります

于 2013-09-11T08:12:20.430 に答える