[英]extending Java's Linked List for personal use
因此,我需要一個鏈表來存儲多個變量,因此我想使用手工制作的鏈表ADT,還希望Java的鏈表的Comparator Sorts來自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失敗時發生了什么,或者是否應該擴展而不是做其他事情?
以下方法是一個類方法 :
public static void insertIntoPosition(HTreeNode node, int position)
因此,它不需要HLinkedList
實例即可被調用。
但是,您的類HTreeNode
是一個內部類 -需要實例化HLinkedList
的“附加”實例。
這兩個事實相互矛盾(您無法在此方法中實例化此類型的對象)
您可以將static
關鍵字添加到HTreeNode
的聲明中,以克服此問題:
public static class HTreeNode { //note the static keyword usage
....
}
另一個問題是,您不應在HLinkedList
上具有泛型類型限定符。 它沒有按照您的想法做。 您要指定的是創建一個存儲“內容”的類,這不是內部類。 相反,你需要移動HTreeNode
類外HLinkedList
,然后用這個來代替:
public class HLinkedList extends LinkedList <HTreeNode>
否則,泛型類型將隱藏內部類,我還可以創建一個存儲字符串的HLinkedList
。
HLinkedList<String> hll = new HLinkedList<String>();
hll.add("Hello World");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.