老网站用新域名,广州昨天发生重大新闻,如何自己设计一个网站,关键词分析工具网站问题#xff1a;怎么样实现对一个对象的深拷贝
使用深拷贝的方法有点难实现啊。要保证原来的对象和克隆对象不是共享同一个引用的步骤是什么啊#xff1f;
回答一
一种安全的方法是先序列化对象#xff0c;然后反序列化。这保证了所有东西都是一个新的引用。
这里有一篇…问题怎么样实现对一个对象的深拷贝
使用深拷贝的方法有点难实现啊。要保证原来的对象和克隆对象不是共享同一个引用的步骤是什么啊
回答一
一种安全的方法是先序列化对象然后反序列化。这保证了所有东西都是一个新的引用。
这里有一篇关于如何高效实现这个的文章。
注意:类可能会重写序列化的方法这样就不会创建新的实例例如对于单例来说如果你的类不是可序列化的这当然也不会生效啦。
回答二
实现深拷贝的一种方法是向每个关联的类添加复制构造函数。一个复制构造函数接受’this’的一个实例作为其单个参数并从这个实例中复制所有值。这函数要干非常多的工作但是也是非常直接和安全。
编辑:注意你不需要使用访问方法来读取属性。你可以直接访问所有属性因为源实例总是与具有复制构造函数的实例具有相同的类型。这是很明显的但可能会被忽视了。
例子:
public class Order {private long number;public Order() {}/*** Copy constructor*/public Order(Order source) {number source.number;}
}public class Customer {private String name;private ListOrder orders new ArrayListOrder();public Customer() {}/*** Copy constructor*/public Customer(Customer source) {name source.name;for (Order sourceOrder : source.orders) {orders.add(new Order(sourceOrder));}}public String getName() {return name;}public void setName(String name) {this.name name;}
}注意如果复制构造函数的话你需要知道你复制的那个对象运行的时候是什么类型的。所以上面的方法你不能简单第用来复制一个混合类型的list你要用一些反射的代码去完成
文章翻译自Stack Overflowhttps://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object