如何使用现有对象java的新参考创建新对象

时间:2016-10-01 10:39:22

标签: java

我调用removeAll方法从我的tempDictionary中删除但是它从d中删除。那么如何避免隐私泄露并为tempDictionary分配新的参考。

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 

}
} 

2 个答案:

答案 0 :(得分:0)

执行此操作时:

   Dictionary tempDictionary  = d ;

您实际执行的操作是创建第二个字典引用,指向现有字典引用(在您的情况下为d)。 因此,您在tempDictionary上执行的每个操作都会影响d,因为它们都指向同一个对象。 要解决此问题,您可以将d的组件复制到新词典中,然后执行您想要复制的内容。

编辑:我在上一个答案中使用了instance关键字,这是错误的,因为使用new关键字创建了一个新实例。我的意思是引用。感谢Amer Qarabsa和Tokazio指出。

答案 1 :(得分:0)

使用java reflection以递归方式继续深入复制字段。或使用像kryo这样的现有库