gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:43:39 24 4
gpt4 key购买 nike

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

列表节点保存一个 E 类型的变量“data”,并且在通用链表代码中我有一个 E 类型的变量“tempData”。数据类型E将由程序使用链表确定。

我想做的是通过调用节点函数 getData() 从链接节点“data”检索变量并将其存储在名为 tempData 的变量中。

这是当前代码:

tempData = firstNode.getData();

我的问题是,编译时出现错误,指出它们是“不兼容的类型”。我知道在运行时它们将是相同的数据类型,但是我如何满足它的编译语法?

我尝试将代码放入:

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

但是它不起作用,因为类应该在的地方不允许调用任何方法。我还尝试了以下方法,它有效,但仍然出现原始编译错误。

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

非常感谢您的帮助,谢谢。

编辑 13-28-3

tempData 的声明为“E tempData;”

firstNode 的声明是“private ListNode firstNode;”

firstNode 中的数据声明为“私有(private) E 数据;”通过 .getData() 获取;

LinkedList 类“public class LinkedList E”的 header

ListNode 类“public class ListNode E”的 header

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

最佳答案

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

Class<E> clazz;

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

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

...

new MyList<E>(E.class);

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

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

关于java - 将泛型返回类型与 Java 中类似的泛型变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com