2016-10-01 154 views
0

我調用removeAll方法從我的tempDictionary中刪除,但它從d中刪除。那麼,我該如何避免隱私泄漏,併爲tempDictionary分配新的參考。如何使用現有對象的新引用創建新對象java

public static void play1(Dictionary d, int level)throws IOException 
{ 
    Dictionary tempDictionary = d ; 
    tempDictionary.removeAll(); 
} 
//after looking to the link doesn't compile I tried to do exact same 

class Dictionary { 
private Dictionary dictionary; public Dictionary(Dictionary temp) { 
this.dictionary = temp.dictionary; // error 

} 
} 
+4

http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java –

+0

類字典{ 私人詞典的可能重複;公共字典(Dictionary temp){this.dictionary = temp.dictionary; //會工作? } } – Anny

+0

在複製構造函數中,您應該分配類Dictionary的字段,而不是對象本身。你如何實現Dictionary類? –

回答

0

當你這樣做:

Dictionary tempDictionary = d ; 

你實際做的是您創建一個指向現有的第二字典引用(在你的情況d)。 因此,您在tempDictionary中執行的每個操作都會影響d,因爲它們都指向相同的對象。 爲了解決這個問題,你可以將d的組件複製到一個新的字典中,做你想要的副本。

編輯:我在之前的答案中使用了實例關鍵字,這是錯誤的,因爲新的實例是與新的關鍵字創建的。我的意思是參考。感謝Amer Qarabsa和Tokazio指出。

+0

它的變量類型Dictionary不是,有些可能會將它誤稱爲一個Dictionary實例,但它完全錯誤地說它是一個實例,instance = object –

+0

請問你可以通過複製來告訴我你的意思嗎? – Anny

+0

@AmerQarabsa我不明白你想說什麼,請解釋我是錯的。 – theVoid

0

使用java反射繼續進行字段的深層副本遞歸。或使用現有的庫等KRYO

相關問題