【发布时间】:2010-09-06 23:41:30
【问题描述】:
在 Java 中,假设您有一个包装 ArrayList(或任何集合)对象的类。
您将如何返回其中一个对象,以使调用者不会看到将来对 ArrayList 中的对象所做的任何更改?
即您想返回对象的深层副本,但您不知道它是否可克隆。
【问题讨论】:
在 Java 中,假设您有一个包装 ArrayList(或任何集合)对象的类。
您将如何返回其中一个对象,以使调用者不会看到将来对 ArrayList 中的对象所做的任何更改?
即您想返回对象的深层副本,但您不知道它是否可克隆。
【问题讨论】:
将其转化为规范:
- 对象需要实现一个接口才能被允许进入集合
类似ArrayList<ICloneable>()
那么你可以放心,你总是做一个深拷贝——接口应该有一个保证返回深拷贝的方法。
我认为这是你能做的最好的。
【讨论】:
一种选择是使用序列化。这是一篇解释它的博客文章:
http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html
【讨论】:
我想这是一个显而易见的答案:
使存储在集合中的类成为可克隆的必要条件。您可以在插入时或检索时检查,无论什么更有意义,然后抛出异常。
或者,如果该项目不可克隆,则只需故障返回到按引用返回选项。
【讨论】: