假设我有一个像这样的java对象(只是作为一个简单的例子)
class Town{
Public String name;
Public Set<Business> Businesses;
Public Set<Person> people;
Public Set<House> houses;
//...
}
房屋、人、企业等都是复杂的对象,这些对象又拥有自己的对象,这些对象又拥有自己的对象等 - 有些具有组合性,有些具有聚合类型关系。
现在,我需要向 Town 类添加一个 clone
方法,我有两个问题:
如何克隆
房屋
集?我是否只需实现House.clone()
并调用houses.clone()
即可。 set会调用它每个成员的clone方法吗?假设这是一个不平凡的问题(房屋“有”10 组聚合复杂对象,每个房屋“有”10 组聚合复杂对象等等),是否有更好的方法来实现
Town
的克隆方法?
或者我是否只需要花时间在子对象和子子对象等上实现 100 个 .clone()
方法? (与在所有子对象上实现序列化并这样做相比,这会或多或少地工作吗?)
最佳答案
您有几个选择:
- 在所有类上实现克隆方法,以深度复制类及其所有实例变量(如果您不想依赖第三方框架,这有时很重要)
- 序列化对象(可以是文本文件或字符串)。您可以通过使用 Oracle 框架
Serialized
来完成此操作,该框架有一个实例 var,可以解码有关对象的信息。更多信息请点击:http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html - 这是一个可以对对象进行深层复制的第 3 方库:https://github.com/DozerMapper/dozer
有关深度复制库的更多信息:Java deep copy library
关于Java:如何轻松地深度克隆复杂的对象层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432087/