2014-05-20 38 views
0

我試圖在Java中實現一個循環隊列類。爲此,我不得不創建一個節點類,將元素和指針組合到下一個節點。作爲循環,節點需要能夠指向自己。然而,當我去編譯下面的代碼時,編譯器(javac)告訴我我的構造函數(即第5行和第8行)出現錯誤,給出了這個問題的同名錯誤,我不明白爲什麼它不是沒有工作。超類型構造函數被調用之前無法引用這個

任何幫助和解釋爲什麼我的用法是不正確的讚賞。

public class Node<Key>{ 
    private Key key; 
    private Node<Key> next; 
    public Node(){ 
     this(null, this); 
    } 
    public Node(Key k){ 
     this(k, this); 
    } 
    public Node(Key k, Node<Key> node){ 
     key = k; 
     next = node; 
    } 
    public boolean isEmpty(){return key == null;} 
    public Key getKey(){return key;} 
    public void setKey(Key k){key = k;} 
    public Node<Key> getNext(){return next;} 
    public void setNext(Node<Key> n){next = n;} 
} 
+1

你見過這個:http://stackoverflow.com/questions/1625646/refering-to-this-while-invoking-super-constructor? – Random

回答

3

你不能在構造函數是指壽本(或超),所以你應該改變這樣的代碼:

public class Node<Key>{ 
    private Key key; 
    private Node<Key> next; 
    public Node(){ 
    key = null; 
     next = this; 
    } 
    public Node(final Key k){ 
    key = null; 
     next = this; 
    } 
    public Node(final Key k, final Node<Key> node){ 
     key = k; 
     next = node; 
    } 
    public boolean isEmpty(){return key == null;} 
    public Key getKey(){return key;} 
    public void setKey(final Key k){key = k;} 
    public Node<Key> getNext(){return next;} 
    public void setNext(final Node<Key> n){next = n;} 
} 
+1

閱讀評論和答案後,這基本上是我解決的相同的代碼,但我沒有使用關鍵字最終(和javac沒有抱怨)。它在這裏服務的目的是什麼?我應該使用它嗎? (我認爲你的意思是第9行中的「key = k」,但是這是一個旁註) – Robert

+0

final關鍵字不是必需的,它只是告訴虛擬機儘可能少地使用堆內存。至於第九條線你是對的。 –

4

編譯錯誤是

Cannot refer to 'this' nor 'super' while explicitly invoking a constructor 

基本上,你不能用 「this」 從內部 「this(...)

1

你不需要它通過在所有情況下。因爲你可以參考它在其他construtor

0

不能通過「本」爲一個參數來調用構造函數。

相關問題