Java返回副本以隐藏将来的更改

时间:2020-03-05 18:43:45  来源:igfitidea点击:

在Java中,假设我们有一个包装对象的" ArrayList"(或者任何集合)的类。

我们将如何返回这些对象之一,以使调用者将来看不到对ArrayList中的对象所做的任何更改?

即我们想返回该对象的深层副本,但我们不知道该对象是否可克隆。

解决方案

回答

一种选择是使用序列化。这是一篇博客文章,对它进行了解释:

http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html

回答

把它变成一个规范:
-对象需要实现一个接口才能被允许进入集合
类似于" ArrayList <ICloneable>()"

然后,我们可以放心,我们总是进行深层复制,接口应具有保证返回深层复制的方法。

我认为这是我们可以做的最好的事情。

回答

我想这是一个奇怪的答案:

使存储在集合中的类可克隆成为必要条件。我们可以在插入时或者检索时检查是否更有意义,并引发异常。

或者,如果该项目不可克隆,则只需返回到"按引用返回"选项即可。