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

如何返回这些对象之一,以便调用者不会看到 ArrayList 中对该对象所做的任何未来更改?

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

有帮助吗?

解决方案

将其变成规范:
- 对象需要实现接口才能被允许到集合中 ArrayList<ICloneable>()

那么你就可以放心,你总是会进行深拷贝——接口应该有一个保证返回深拷贝的方法。

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

其他提示

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

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

我想这是一个显而易见的答案:

确保集合中存储的类可克隆。您可以在插入时或检索时检查这一点,无论什么更有意义,然后抛出异常。

或者,如果该项目不可克隆,则仅故障返回到按引用返回选项。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top