0

私はJavaで一般的なリンクリストを書いていますが、1つの問題を除いてすべてが機能しています。

リスト ノードは E 型の変数「データ」を保持し、一般的なリンク リスト コードにも E 型の変数「tempData」があります。データ型 E は、リンクされたリストを使用してプログラムによって決定されます。

私がやろうとしているのは、ノード関数 getData() を呼び出して、リンクされたノード「データ」から変数を取得し、それを tempData という変数に格納することです。

現在のコードは次のとおりです。

tempData = firstNode.getData();

私の問題は、コンパイル時に「互換性のない型」であるというエラーが表示されることです。実行時にそれらが同じデータ型になることはわかっていますが、コンパイルするための構文を満たすにはどうすればよいですか?

コードを入れてみました:

if( firstNode.getData() instanceof tempData.getClass() )

しかし、メソッドの呼び出しが許可されていないクラスがあるべき場所として機能しませんでした。私も次のことを試してみましたが、うまくいきましたが、それでも元のコンパイルエラーが発生しました。

if( (firstNode.getData()).getClass == tempData.getClass() )

どんな助けでも大歓迎です、ありがとう。

編集 3-28-13

tempData の宣言は「E tempData;」です。

firstNode の宣言は「private ListNode firstNode;」です。

firstNode 内のデータの宣言は「private E data;」です。これは .getData(); によって取得されます。

LinkedList クラスのヘッダー「public class LinkedList E」

ListNode クラスのヘッダー「public class ListNode E」

ヘッダーの両方の Es は、それらの周りにより小さい記号とより大きい記号があり、投稿されたときに表示されません。

4

1 に答える 1

1

One possible answer would be to store a Class object in your list, like so:

Class<E> clazz;

Then initialize this with the correct object in the constructor:

public MyList(Class<E> clazz) {
   this.clazz = clazz;
}

...

new MyList<E>(E.class);

You can then use this class object to cast objects to the correct type: clazz.cast(firstNode.getData()).

There are probably better solutions, but in the worst case this approach works.

于 2013-03-28T16:52:08.470 に答える