转换泛型类中的数据错误



我有这个通用节点类:

class Node<E>
{
private E data;
private Node<E> link;
public Node(E d)
{
data = d;
link = null;
}
public Node(E d, Node<E> l)
{
data = d;
link = l;
}
public void AddNodeAfter(E d)
{
link = new Node<E>(d, link);
}
}

我的主要课程有两行:

Node<int> n1 = new Node<int>(100);
n1.AddNodeAfter(4.4); //error here

n1.AddNodeAfter(4.4)行给了我我不完全理解的错误Argument 1: cannot convert from 'double' to 'int'

据我所知,最后一个节点包含一个int作为其data但该节点是通用的,所以我假设下一个节点是什么并不重要,因为data可以从节点更改为节点。

但显然我错过了一些东西。所以我的问题是为什么我在泛型类中出现此转换错误?

谢谢!

你没有错过任何东西。 您将泛型类型定义为int并且正在double传递给AddAfterNode方法

您的方法将变为:

public void AddNodeAfter(int d)
{
link = new Node<int>(d, link);
}

所以你不能传递任何东西,除了int

如果您希望代码正常工作,只需将int更改为object

还有更好的方法可以做到这一点。

泛型用于为类创建一种"模板",这是一种参数化类使用的特定类型的方法。Node<int>本质上创建了一个基于Node<E>的新类,其中所有E都替换为int,因此link的类型对于您的n1实例Node<int>。您也可以自由创建Node<double>实例,只是不能根据类型定义将它们链接在一起。

如果你想在你的节点中真正容纳任何类型的对象,你需要有一个更灵活的类型,比如Object你的节点数据,如果你需要获取数据类型,请使用反射之类的东西。

Node<E>是一个泛型类,没有泛型对象的概念。new Node<int>()是带有整数的类型化对象。它只能接受可以隐式转换为整数的类型。

请参阅预定义类型的隐式转换。

最新更新