如何更快地在 Java 中创建/复制对象? [复制]
Posted
技术标签:
【中文标题】如何更快地在 Java 中创建/复制对象? [复制]【英文标题】:How to create/copy an Object in Java faster? [duplicate] 【发布时间】:2014-11-19 20:46:24 【问题描述】:我想在java中复制一个对象而不复制引用。
Object o1 = new Object();
Object o2 = o1;
但是 o2 不应该复制 o1 的引用。因此,在 o2 中所做的任何更改都不得影响 o1。
我们如何在 java 中做到这一点?
【问题讨论】:
clone() 方法特定于 Object 类。如果我必须复制某个特定类的对象,我认为克隆将不起作用。 @Setu,正如下面其他人所指出的,您需要覆盖特定类的clone
方法。
【参考方案1】:
您可以覆盖clone()
方法,该方法将创建整个对象图的副本(深拷贝)并创建一个新对象。
注意:每个类都将从 Object 类继承默认的 clone()
实现。但是您必须根据对象的内容重写该方法以执行复制。
仅供参考:
默认的 Object.clone() 是浅拷贝。然而,它 旨在抛出 CloneNotSupportedException 除非您的对象 实现 Cloneable。
并且当你实现 Cloneable 时,你应该重写 clone() 来使 它通过在所有字段上调用 clone() 来进行深层复制 自己可以克隆。
【讨论】:
【参考方案2】:您可以使用Object.clone() 方法克隆对象:
Object o2 = o1.clone();
【讨论】:
【参考方案3】:如果您需要复制除 Object 之外的其他类,请创建一个复制构造函数或静态工厂方法。效果是这样的:
MyClass o1 = new MyClass();
MyClass o2 = new MyClass(o1); // in constructor make new object with data from o1 attributes
或
MyClass o1 = new MyClass();
MyClass o2 = MyClass.makeCopy(o1); // make static method for create new copy (similar like above)
不要使用克隆。 -> Effective Java
【讨论】:
以上是关于如何更快地在 Java 中创建/复制对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Javascript 在 JSON 中创建多个对象? [复制]
如何在 Microsoft Access 数据库中创建查询对象? [复制]