2

我有一个 Java webapp,它提取员工的记录并将其存储在一个自制的数据持有者对象中,奇怪的是,它被称为“EmployeeRecordDataHolder”。

我想在更新过程开始时制作一份 EmployeeRecordDataHolder 的副本,以便我可以进行比较以报告数据的变化情况。

我遇到了对成员数据的原始和副本共享引用的一些问题,结果是原始数据没有保持未更新。

我最初通过 HashMap 从数据库中取回数据。如果我从 HashMap get() 填充两个对象(原始对象和副本),这两个对象是否仍会共享对数据的相同引用,从而导致更改一个对象中的数据也会更改副本中的数据?

如果我使用 HashMap 填充原始对象,然后通过在副本的所有 setter 中调用原始对象上的所有 getter 来制作副本怎么办?例子:

copyDataHolderObj.setSomePieceOfData(  originalDataHolderObj.getSomePieceOfData() );

这种方法会导致两个可以相互独立更改的对象吗?

非常感谢提前

史蒂夫

4

1 回答 1

1

回答你的第一个问题:

是的,两者都将共享对同一对象的引用。HashMap存储引用,因此所做的任何更新都是在原始对象上完成的。页面清楚地说明了更改已反映。

回答你的第二个问题:

你可以这样做。创建所有对象的副本。

于 2012-05-24T14:56:09.630 回答