2012-08-23 85 views
4
private class Node 
{ 
    Item name; 
    Node next; 

    public void deleteObject() 
    { 
     this = null; 
    } 
} 

是否可以刪除類內的對象?我正在嘗試做以上,但它給出了一個錯誤,左側應該是一個變量。 Node是內部類。謝謝。在類內刪除此對象

編輯: var1var2具有參考這個類的對象,當我做var1 = null刪除var1,我想這var2也會被刪除。

+0

爲什麼要這麼做? – assylias

+0

你是什麼意思刪除?你的意思是解除參考?您不能從其內部取消引用對象。 – Dan

+0

你想析構? –

回答

9

不,這是不可能的。這也不是必要的。

只要從某個根對象無法訪問該對象,該對象就有資格進行垃圾回收(有效地解除分配)。基本上自我引用並不重要。

只要確保你永遠不會存儲對象的引用,這些引用將不再使用,剩下的將由垃圾回收器處理。

關於您的編輯:

編輯: VAR1和VAR2具有參考這個類的對象,當我做VAR1 = NULL刪除VAR1,我想這VAR2也會被刪除。

您不能強制另一個對象刪除其引用。你必須明確告訴其他對象這樣做。舉例來說,如果你正在實現一個鏈表(因爲它看起來像你的榜樣),我建議你添加一個prev參考,並做一些事情,如:

if (prev != null) 
    prev.setNext(next); // make prev discard its reference to me (this). 

if (next != null) 
    next.setPrev(prev); // make next discard its reference to me (this). 
+0

我編輯了我的問題,你能看看嗎?謝謝。 –

+1

已經做到了:-) – aioobe

0

不,你不能刪除this對象或將其標記爲同一班級的垃圾收集。

this不是一個變量,你不能在表達式的左邊有關鍵字,所以編譯器錯誤。

0

是不可能的。你應該像「NodeManager」那樣收集節點,然後從這個「管理器」中刪除節點。

例如,如果您製作節點列表。您可以從列表中刪除該節點。顯然,列表將包含第一個節點和一系列方法,並在這些方法之間存在deleteNode。

請參閱LinkedList