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

时间:2008-08-27 09:48:01

标签: java deep-copy cloning

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

如何返回其中一个对象,以致调用者将来看不会对ArrayList中的对象进行任何更改?

即。您想要返回该对象的深层副本,但您不知道它是否可以克隆。

3 个答案:

答案 0 :(得分:4)

将其转换为规格:
- 对象需要实现一个接口才能被允许进入集合 像ArrayList<ICloneable>()

这样的东西

然后你可以放心,你总是做一个深层复制 - 界面应该有一个保证返回深拷贝的方法。

我认为这是你能做的最好的事情。

答案 1 :(得分:2)

一种选择是使用序列化。这是一篇解释它的博客文章:

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

答案 2 :(得分:1)

我想这是一个可疑的答案:

使存储在集合中的类可以克隆。您可以在插入时或检索时检查,无论什么更有意义,并抛出异常。

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