package mianshi; public class Body implements Cloneable{ public Head head; public Body() {} public Body(Head head) {this.head = head;} @Override protected Object clone() throws CloneNotSupportedException { Body newBody = (Body) super.clone(); newBody.head = (Head) head.clone(); return newBody; } static class Head implements Cloneable{ public Face face; public Head() {} public Head(Face face){this.face = face;} @Override protected Object clone() throws CloneNotSupportedException { //return super.clone(); Head newHead = (Head) super.clone(); newHead.face = (Face) this.face.clone(); return newHead; } } static class Face implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public static void main(String[] args) throws CloneNotSupportedException { Body body = new Body(new Head(new Face())); Body body1 = (Body) body.clone(); System.out.println("body == body1 : " + (body == body1) ); System.out.println("body.head == body1.head : " + (body.head == body1.head)); System.out.println("body.head.face == body1.head.face : " + (body.head.face == body1.head.face)); } }
body == body1 : false body.head == body1.head : false body.head.face == body1.head.face : false
相关推荐
"clone"方法就是用于复制对象的一种方式,尤其在Java等支持此功能的语言中。本文将深入探讨"深度克隆"这一概念,以及它与普通克隆的区别,并讨论其在实际应用中的优缺点。 深度克隆,也称为完全克隆,是一种创建新...
List的深度复制 浅谈C#中List<T>对象的深度拷贝问题
这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来理解一下什么是浅复制和深复制。在Java中,当我们使用`clone()`方法或`System.arraycopy()`进行复制时,通常得到的是浅复制的结果。这意味着原始对象...
我想实现了深度复制呢,也就是我新复制出来的对象不是仅仅复制引用, 而是复制对象!比如说,你需要在一个模板的基础上修改出5个版本的建立,每个版本投递到不同的企业上,版本1投给公司A,版本2投给公司B,。。。...
在Java中,如果一个类没有实现`Cloneable`接口并重写`clone()`方法,那么通常无法直接进行深度拷贝。这时,我们可以利用Java的反射机制来实现。反射是Java提供的一种强大的工具,它允许我们在运行时检查类、接口、...
- 在实际应用中,考虑使用第三方库,如Apache Commons Lang的`DeepCloneable`接口,或者Google的`Gson`库,它们提供了更方便的深度复制功能。 理解并正确使用浅复制和深复制对于开发高效、健壮的Java应用程序至关...
而如果我们使用`clone()`方法进行深度复制,修改`mySource`的`MyContent.val`后,`myTarget`的值就不会受影响。 总结来说,理解C#中的深度复制和浅度复制是优化代码和避免意外副作用的关键。在处理复杂对象时,选择...
`clone()`的使用通常涉及到深度复制和浅复制的概念,这两者在数据结构和内存管理中扮演着关键角色。 首先,让我们理解`clone()`的基本用法。`clone()`方法创建并返回一个当前对象的副本,新创建的对象与原对象具有...
在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep Clone)。 1. 浅克隆(Shallow Clone) 浅克隆是Java克隆机制的默认行为。当一个对象被克隆时,如果它的成员变量是基本类型(如int、double...
为了得到深拷贝,即完全独立的副本,你需要手动实现深度复制逻辑,例如,遍历引用类型字段并逐个复制每个元素。 总之,`clone()`方法在Java中提供了对对象复制的基本支持,尤其适用于需要创建对象副本的情况。然而...
$ npm install clone-json --save # Install with yarn $ yarn add clone-json 用法 两个数组相等 let cloneJson = require ( 'clone-json' ) let json = { a : 123 , b : 'str' , c : true , d : [ 1 , '2' , ...
js克隆使用深度复制的Javascript对象复制用法var deepClone = require ( './js-clone/index.js' ) ;var object = { name : 'Kator James' , work : { companyName : 'LogicalAddress Ltd' , getCompanyName : ...
"git clone"是Git中的一个核心命令,用于复制远程仓库到本地。在本文中,我们将深入探讨`git clone`命令以及如何获取其最新版本。 首先,让我们了解`git clone`的基本用法。当你运行`git clone <repository>`时,它...
if (fieldValue is ICloneable) // 如果字段值实现了ICloneable接口,使用Clone()方法进行深度复制 { field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone()); } else { field.SetValue...
- **深度克隆**:不仅复制对象本身,还递归地复制它引用的对象,确保新创建的对象和原始对象及其所引用的对象都完全独立。 3. **版本控制系统中的克隆** 在版本控制软件(如Git)中,克隆指的是获取远程仓库的...
深度克隆并返回模式的副本,向该模式添加关键路径/模式类型对,您还可以添加另一个模式并复制所有路径、虚拟、getter、setter、索引、方法和静态。 特征: 深度克隆模式 复制路径、虚拟、getter、setter、索引、...
在C#编程中,复制对象是一项常见的操作,通常分为浅表复制和深度复制两种方式。浅表复制仅复制对象的引用,而深度复制则会创建一个全新的对象,包括所有嵌套的对象。下面我们将详细探讨这两种复制方法以及如何在C#中...