2016-10-01 16 views
0

私はtempAから削除するremoveAllメソッドを呼び出しましたが、dから削除します。だから私はどのようにプライバシーリークを避け、tempDictionaryに新しいrefrenceを割り当てることができます。既存のオブジェクトの新しいrefrenceを使って新しいオブジェクトを作成する方法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

class辞書{ ;パブリックディクショナリ(Dictionary temp){ this.dictionary = temp.dictionary; //働く? } } – Anny

+0

コピーコンストラクタでは、オブジェクト自体ではなく、クラスDictionaryのフィールドを割り当てる必要があります。どのようにDictionaryクラスを実装しましたか?例えば、 –

答えて

0

あなたが行う場合は、この:

Dictionary tempDictionary = d ; 

あなたが実際に行うことは、あなたが(あなたのケースd)において、既存のものを指す第二の辞書の参照を作成することです。 したがって、tempDictionaryで実行するアクションは、両方とも同じオブジェクトを指しているため、dにも影響します。 これを解決するには、dのコンポーネントを新しい辞書にコピーして、コピーしたいものを実行します。

EDIT:前の回答でinstanceキーワードを使用しましたが、新しいインスタンスが新しいキーワードで作成されているため間違っています。私が意味していたのはreference.Thanksを指しているAmer QarabsaとTokazioです。

+0

辞書型の変数ではなく、誤ってDictionaryインスタンスへの参照と呼ばれることもありますが、そのインスタンス、インスタンス=オブジェクトとは完全に間違っています –

+0

コピーでどういう意味ですか? – Anny

+0

@AmerQarabsaあなたは何を言っているのか分かりません、私は間違っていると説明してください。 – theVoid

0

フィールドrecursivellyのディープコピーに進むには、Javaリフレクションを使用します。 kryoのような既存のライブラリを使用する

関連する問題