我想在不复制引用的情况下复制java中的对象。
Object o1 = new Object();
Object o2 = o1;
但是o2不应该复制o1的引用。因此,在o2中完成的任何更改都不得影响o1。
我们如何在java中执行此操作?
答案 0 :(得分:4)
您可以覆盖clone()
方法,该方法将创建整个对象图(深层副本)的副本并创建新对象。
注意:每个类都将继承Object类的默认clone()
实现。但是,您必须根据对象的内容覆盖执行复制的方法。
仅供参考:
默认的Object.clone()是浅拷贝。但是,它是 旨在抛出CloneNotSupportedException,除非你的对象 实现Cloneable。
当你实现Cloneable时,你应该覆盖clone()来制作 它通过在所有字段上调用clone()来执行深层复制 他们自己可以克隆。
答案 1 :(得分:2)
您可以使用Object.clone()方法克隆对象:
Object o2 = o1.clone();
答案 2 :(得分:1)
如果需要复制除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
答案 3 :(得分:0)
您应该使用Cloning,然后您拥有Object
Object obj2=obj.clone(); // clone() in Object class has protected modifier
然后你必须在你的班级中重写克隆方法。
克隆
创建并返回此对象的副本。的确切含义 "拷贝"可能取决于对象的类。一般意图是 对于任何对象x,表达式为: