2016-10-01 106 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

相关问题