【问题标题】:Instantiating generic class实例化泛型类
【发布时间】:2015-07-06 19:38:40
【问题描述】:

我正在尝试使用泛型实现 SkipList,但遇到了问题。我似乎无法实例化节点。

节点类:

public class SkipNode<E> 
{
    private E key;
    private Integer value;

    //Links
    private SkipNode<E> up, down, left, right;

    //Head and tail keys. Cannot add before -oo or after +oo.
    public static String negInf = "-oo";
    public static String posInf = "+oo";

    public SkipNode() {}

    public SkipNode(E k, Integer v)
    {
        key = k;                                // Add key
        value = v;                              // Assign value

        up = down = left = right = null;        // Set links to null
    }

    //Getters and setters down here
}

列表类:

import java.util.Random;

public class SkipList<E>
{
    private SkipNode<E> head;
    private SkipNode<E> tail;

    private int size, height;
    private Random rand;

    public SkipList()
    {
        SkipNode<E> p1, p2;

        p1 = new SkipNode<E>(SkipNode.negInf, null);
    }
}

错误出现在p1 = new SkipNode&lt;E&gt;(SkipNode.negInf, null); 上,我尝试删除该行上的&lt;E&gt; 并将其更改为:p1 = new SkipNode(SkipNode&lt;E&gt;.negInf, null);,这没有多大意义,但我想我会尝试一下。我也尝试在参数中执行“-oo”,但它希望我将 Node 构造函数参数更改为 String 和 Integer。

我做错了什么?

【问题讨论】:

    标签: java list generics skip-lists


    【解决方案1】:

    初始化类时需要使用具体类型

    SkipNode<String> p1 = new SkipNode<String>(SkipNode.negInf, null);
    

    【讨论】:

    • 谢谢,请您也回答我其他评论中的问题吗?
    • OP 的问题:每次我想在列表中添加一些东西时,我都必须这样做吗?如果我不知道传递的数据类型怎么办?
    • @yayu SkipNode 是通用的,所以你必须在实现时定义类型。
    • @Reimeus 哦,对了!不敢相信我忘记了。谢谢两位的帮助!
    猜你喜欢
    • 2013-10-03
    • 2011-04-02
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多