【问题标题】:Generics & Types泛型和类型
【发布时间】:2011-10-01 20:09:40
【问题描述】:

我在某个数据结构中使用泛型。我必须存储int xint yValue value,其中value 是泛型类型。

我试图将所有这些分组到一个名为 NodeData 的对象中,然后在另一个类中创建一个 NodeData 的 ArrayList,(因此数组列表中的每个元素都将包含一个 x、y 和值.

我的NodeData如下:

public class NodeData<Value> {

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

在另一个类中,数组列表实例化如下:ArrayList&lt;NodeData&gt; items = new ArrayList&lt;NodeData&gt;();

我收到一个数组列表错误:NodeData is a raw type. References to NodeData&lt;Value&gt; should be parametrized. 为什么会这样? NodeData 已经参数化为 NodeData&lt;Value&gt;

谢谢

【问题讨论】:

  • 当您执行 NodeData 时,假定您将用一些真实的类代替 Value。您定义它的方式 Value 可以是任何可能不是您想要的类型。
  • 您收到的不是错误,而是警告,这是一个很大的不同。你正在做的事情并不安全,但如果你小心的话,可能会奏效。我建议你遵循 duffymo 的建议,因为这是泛型的用途——允许编译时类型检查。

标签: java generics arraylist


【解决方案1】:

不在您的数组声明中。试试这样:

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

其中Foo 是该实例所需的Value 类型。

【讨论】:

    【解决方案2】:

    在另一个类中,您必须指定要使用的类型来代替泛型类型Value

    例如。

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

    【讨论】:

    • 不起作用。它说Bound mismatch: The type Value is not a valid substitute for the bounded parameter &lt;Value extends Comparable&lt;? super Value&gt;&gt; of the type NodeData&lt;Value&gt; 为什么会这样?我不明白
    • @Nayefc 最后我错过了&gt;。现在已经修好了。
    • 这不是我没有复制粘贴的问题,是我自己添加的。它现在自己消失了,我的 IDE 可能需要时间来意识到这一点。现在可以使用了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多