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>()"
然后,我们可以放心,我们总是进行深层复制,接口应具有保证返回深层复制的方法。
我认为这是我们可以做的最好的事情。
回答
我想这是一个奇怪的答案:
使存储在集合中的类可克隆成为必要条件。我们可以在插入时或者检索时检查是否更有意义,并引发异常。
或者,如果该项目不可克隆,则只需返回到"按引用返回"选项即可。