2011-10-01 89 views
1

我在某种数据结构中使用泛型。我必须存储int x,int yValue value,其中value是通用类型。仿制药和类型

我试图将所有这些在一个对象调用NodeData然后在另一个类中,创建的NodeData的一个ArrayList,(因此在阵列列表中的每个元素将包括保持一个x,y和价值。

NodeData如下:

public class NodeData<Value> { 

    private int x; 
    private int y; 
    private Value value; 

在另一大类,数组列表中的实例如下:ArrayList<NodeData> items = new ArrayList<NodeData>();

我得到一个错误的一个列表说:NodeData is a raw type. References to NodeData<Value> should be parametrized.为什么呢? NodeData已被参数化为NodeData<Value>

谢谢

+0

当你做NodeData 它假设你将代替一些真实的类的价值。您定义它的方式值可以是任何类型,可能不是您想要的。 – MeBigFatGuy

+0

你没有得到一个错误,而是一个***警告***,这是一个很大的区别。你在做什么是不安全的,但如果你保重,可能会有效。我建议你遵循duffymo的建议,因为这是泛型的目的 - 允许编译时类型检查。 –

回答

4

不在你的数组声明中。试着这样说:

List<NodeData<Foo>> list = new ArrayList<NodeData<Foo>>(); 

其中Foo是要用于该实例的Value类型。

2

在其他类,你必须指定你打算到位泛型类型Value

例如使用类型。

ArrayList<NodeData<String>> items = new ArrayList<NodeData<String>>();. 
+0

不起作用。它表示“绑定不匹配:类型值不是绑定参数的有效替代”<数值扩展可比较<?超值“的类型NodeData '这是为什么?我不明白 – darksky

+0

@Nayefc我在最后错过了一个'>'。现在已经修复了。 –

+0

这不是我没有复制和粘贴的问题,我自己添加了它。它现在只是自己消失了,也许花了一些时间让我的IDE意识到这一点。现在感谢。 – darksky