在Java中将泛型返回类型与类似的泛型变量进行比较

在Java中将泛型返回类型与类似的泛型变量进行比较,java,generics,comparison,Java,Generics,Comparison,我正在用Java编写一个通用链表,除了一个问题外,其他一切都正常工作 列表节点保存一个类型为E的变量“data”,在常规链表代码中,我有一个类型为E的变量“tempData”。数据类型E将由程序使用链表确定 我试图通过调用节点函数getData()从链接节点“data”中检索变量,并将其存储在名为tempData的变量中 以下是当前代码: tempData = firstNode.getData(); 我的问题是,在编译时,我得到一个错误,说它们是“不兼容类型”。我知道在运行时,它们将是相同的

我正在用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中数据的声明是“private E data;”,它由.getData()获取

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

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


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

一个可能的答案是在列表中存储一个类对象,如下所示:

Class<E> clazz;
类clazz;
然后在构造函数中使用正确的对象初始化该对象:

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

...

new MyList<E>(E.class);
公共MyList(类clazz){
this.clazz=clazz;
}
...
新MyList(E.class);
然后可以使用该类对象将对象强制转换为正确的类型:
clazz.cast(firstNode.getData())


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

您能在问题中添加tempData和firstNode的声明吗?这将使我更容易发现我怀疑的问题。@Jules E tempData;以及在firstNode(和所有节点)中的私有E数据;它由.getData()返回,firstNode本身及其getData()方法是如何声明的?firstNode可能声明为
ListNode firstNode
,是吗?(要使代码正确显示,请在其周围使用反向单引号)。事实证明,我忘记在ListNode之后添加“”了,非常感谢您的帮助在尝试代码时,我遇到了几个错误,因此我将其更改为:Class c=tempData.getClass();唯一的问题是强制转换仍然无法工作,因为我得到以下错误LinkedList.java:115:error:Compatible types tempData=c.cast(firstNode.getData());因此,我尝试将两者强制转换为同一类型,并得到LinkedList.java:115:error:unexpected type c.cast(tempData)=c.cast(firstNode.getData());^我在做你想做的错事吗?我对我的意思做了更多的解释。这有帮助吗?我很想试试你写的东西,但是因为这是为了一个已经提供了UML图的任务,我不允许更改构造函数的参数