如何更快地在 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 中创建多个对象? [复制]

如何在java中创建自己的树? [复制]

如何在 Microsoft Access 数据库中创建查询对象? [复制]

在 Java 中创建日期的正确方法是啥? [复制]

如何在 java 中创建一个 2D ArrayList? [复制]

如何在 Java 静态块中创建本地类? [复制]