我正在用Java编写一个通用链表,并且除了一个问题外,其他一切都在工作。
列表节点包含E类型的变量“data”,并且我在一般链表代码中也有一个类型为E的变量“tempData”。数据类型E将由程序使用链表确定。
我要做的是通过调用节点函数getData()从链接节点“data”中检索变量,并将其存储在名为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中的数据声明是“私有E数据”;这是由.getData();
获得的LinkedList类的标题“public class LinkedList E”
ListNode类的标题“public class ListNode E”
标题中的Es都小于和大于它们周围的符号,它们只是在发布时才会显示。
答案 0 :(得分:1)
一个可能的答案是在列表中存储Class对象,如下所示:
Class<E> clazz;
然后使用构造函数中的正确对象初始化它:
public MyList(Class<E> clazz) {
this.clazz = clazz;
}
...
new MyList<E>(E.class);
然后,您可以使用此类对象将对象强制转换为正确的类型:clazz.cast(firstNode.getData())
。
可能有更好的解决方案,但在最坏的情况下,这种方法可行。