0

我正在用 Java 编写一个通用链表,除了一个问题外,一切正常。

列表节点包含一个 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 的声明是“私有 ListNode firstNode;”

firstNode 中的数据声明为“私有 E 数据”;由 .getData() 获得;

LinkedList 类“公共类 LinkedList E”的标头

ListNode 类“公共类 ListNode E”的标头

标题中的两个 E 周围都有小于和大于符号,它们只是在发布时不显示。

4

1 回答 1

1

一种可能的答案是将 Class 对象存储在您的列表中,如下所示:

Class<E> clazz;

然后在构造函数中用正确的对象初始化它:

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

...

new MyList<E>(E.class);

然后,您可以使用此类对象将对象转换为正确的类型:clazz.cast(firstNode.getData()).

可能有更好的解决方案,但在最坏的情况下,这种方法有效。

于 2013-03-28T16:52:08.470 回答