所以我需要一个链表来存储多个变量,所以我想使用我手工制作的链表ADT,但也想要Java的链表的比较器从collections.sort()中分类;
所以我尝试编辑了我的代码如下:
public class HLinkedList <HTreeNode> extends LinkedList <HTreeNode>
{
public class HTreeNode {
public HTreeNode left;
public HTreeNode right;
public HTreeNode next;
public int frequency;
public char value;
public String code;
public HTreeNode(int freq, char val, HTreeNode l, HTreeNode r, HTreeNode n, String code) // code is the path taken to this node, how to explain it in code?
{
value = val;
frequency = freq;
left = l;
right = r;
next = n;
code = ""; // just initialized ,but have to think through logic.
}
}
但如果我这样做,而不只是public class HLinkedList
(除了我不能使用Collections.sort(HList, comparatorA)
之外没问题,我需要一行代码来获取Java的链接列表。
无论如何,如果我的代码如上所示,则返回
cannot make static reference to non-static type HTreeNode in following line,
在HTreeNode下带红色衬里。如果我不尝试扩展LinkedList,则不会发生这种情况。
public static void insertIntoPosition(HTreeNode node, int position)
也跟着上述错误是
中的错误public HLinkedList() //constructor
{
head = null; //inital value
nItem = 0;//counter
}
其中代码中的多个出现表明它们不能静态引用非静态头。通常当这样的东西出现时,我点击“使头部静止”,但在这种情况下,当我这样做时,会弹出更多错误,现在指向所有“头部”引用。
我想知道当我尝试并且未能扩展LinkedList时发生了什么,或者如果我不应该扩展但是可能做其他事情呢?
答案 0 :(得分:2)
以下方法是类方法:
public static void insertIntoPosition(HTreeNode node, int position)
因此,为了被调用,它不需要HLinkedList
的实例。
但是,您的班级HTreeNode
是内部班级 - 并且需要HLinkedList
的“实际”实例才能进行实例化。
这两个事实相互矛盾(你不能在这个方法中实例化这种类型的对象)
您可以将static
关键字添加到HTreeNode
的声明中,以便克服这个问题:
public static class HTreeNode { //note the static keyword usage
....
}
答案 1 :(得分:2)
另一个问题是你不应该在HLinkedList
上拥有泛型类型限定符。这不符合你的想法。你指定的是创建一个存储“某事”的类,这不是内部类。相反,您需要将HTreeNode
类移到HLinkedList
之外,然后再使用它:
public class HLinkedList extends LinkedList <HTreeNode>
否则,泛型类型会隐藏内部类,我也可以创建一个存储字符串的HLinkedList
。
HLinkedList<String> hll = new HLinkedList<String>();
hll.add("Hello World");