我调用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
}
}
答案 0 :(得分:0)
执行此操作时:
Dictionary tempDictionary = d ;
您实际执行的操作是创建第二个字典引用,指向现有字典引用(在您的情况下为d)。 因此,您在tempDictionary上执行的每个操作都会影响d,因为它们都指向同一个对象。 要解决此问题,您可以将d的组件复制到新词典中,然后执行您想要复制的内容。
编辑:我在上一个答案中使用了instance关键字,这是错误的,因为使用new关键字创建了一个新实例。我的意思是引用。感谢Amer Qarabsa和Tokazio指出。答案 1 :(得分:0)
使用java reflection以递归方式继续深入复制字段。或使用像kryo这样的现有库