2016-10-01 2 views
0

Ich habe die removeAll-Methode aus meinem tempDictionary entfernen, aber es entfernt von d. Wie kann ich Datenschutzlecks vermeiden und tempDictionary einen neuen Verweis zuweisen?Wie erstellt man ein neues Objekt mit neuer Referenz eines vorhandenen Objekts 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

möglich duplizieren von http://StackOverflow.com/Questions/869033/How-Do--Copy-an-Object-in-Java –

+0

Klasse Wörterbuch { private Wörterbuch Wörterbuch; Öffentliches Wörterbuch (Dictionary temp) { this.dictionary = temp.dictionary; // werde arbeiten ?? } } – Anny

+0

Im Kopierkonstruktor sollten Sie Felder der Klasse Dictionary zuweisen, nicht das Objekt selbst. Wie implementieren Sie den Wörterbuchunterricht? –

Antwort

0

Wenn Sie dies tun:

Dictionary tempDictionary = d ; 

, was Sie eigentlich tun, ist, dass Sie eine zweite Wörterbuch Referenz erstellen, die auf den bestehenden Punkte (in Ihrem Fall d). Jede Aktion, die Sie in tempDictionary ausführen, wirkt sich auch auf d aus, da beide auf dasselbe Objekt zeigen. Um dies zu lösen, können Sie die Komponenten von d in ein neues Wörterbuch kopieren, was Sie kopieren möchten.

BEARBEITEN: Ich verwendete das instance-Schlüsselwort in der vorherigen Antwort, die falsch ist, weil eine neue Instanz mit dem neuen Schlüsselwort erstellt wird. Was ich meinte, ist ein Verweis. Dank an Amer Qarabsa und Tokazio für das Aufzeigen.

+0

Es ist eine Variable vom Typ Dictionary nicht, einige können es fälschlicherweise Bezug auf eine Dictionary-Instanz nennen, aber es ist völlig falsch zu sagen, es ist eine Instanz, instance = object –

+0

können Sie mir bitte sagen, was Sie mit Kopie meinen? – Anny

+0

@AmerQarabsa Ich verstehe nicht, was Sie sagen wollen, bitte erklären, wo ich falsch liege. – theVoid

0

Verwenden Sie Java Reflection, um mit der tiefen Kopie der Felder rekursiv fortzufahren. oder verwenden Sie bestehende Bibliothek wie kryo

Verwandte Themen