【问题标题】:How to create/copy an Object in Java faster? [duplicate]如何更快地在 Java 中创建/复制对象? [复制]
【发布时间】:2014-11-19 20:46:24
【问题描述】:

我想在java中复制一个对象而不复制引用。

Object o1 = new Object();
Object o2 = o1;

但是 o2 不应该复制 o1 的引用。因此,在 o2 中所做的任何更改都不得影响 o1。

我们如何在 java 中做到这一点?

【问题讨论】:

  • clone() 方法特定于 Object 类。如果我必须复制某个特定类的对象,我认为克隆将不起作用。
  • @Setu,正如下面其他人所指出的,您需要覆盖特定类的clone方法。

标签: java object


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 2015-01-30
        • 2021-04-07
        • 2021-07-08
        • 1970-01-01
        • 2011-07-25
        • 2010-10-26
        相关资源
        最近更新 更多