Java| Java对象克隆Clone(2)
来源:互联网 发布:淘宝按重量标价 编辑:程序博客网 时间:2024/06/06 12:27
上篇文章简单的介绍了Java中对象克隆的浅层次克隆,这篇文章介绍深层次的克隆.
深层次克隆
被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不是原有的那些被引用的对象。换言之,深层复制要复制的对象引用的对象都复制一遍。
1.深层次克隆实现的简单机制:
在需要进一步Clone的成员属性上进行一次克隆后,将值给浅层次的克隆.有点难理解,看代码:
重点在clone方法中将引用类型的成员shop继续一次克隆,这里需要注意的是Shop 类这里是需要实现Cloneable接口的,原理在第一篇文章已经讲了,同样如果shop中还有引用成员则在Shop 中的方法依旧需要实现Clone方法,然后将Shop类的引用成员gen继续克隆.
package cn.com.yves.object.clone.newclone.clone;/** * * * @author Yves He * */public class Cart implements Cloneable { private String id; private String creater; private Shop shop; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCreater() { return creater; } public void setCreater(String creater) { this.creater = creater; } public Shop getShop() { return shop; } public void setShop(Shop shop) { this.shop = shop; } @Override public Cart clone() throws CloneNotSupportedException { Cart cart = null; cart = (Cart) super.clone(); Shop shopClone = this.shop.clone(); this.setShop(shopClone);// 将本类中的引用成员继续clone后赋值给本类的clone对象 return cart; }}
package cn.com.yves.object.clone.newclone.clone;/** * * * @author Yves He * */public class Shop implements Cloneable { private String name; private double price; private Generic gen; // 一般的参数 @Override public Shop clone() throws CloneNotSupportedException { return (Shop) super.clone(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Generic getGen() { return gen; } public void setGen(Generic gen) { this.gen = gen; }}
package cn.com.yves.object.clone.newclone.clone;/** * * * @author Yves He * */public class Generic { private String color; private double size; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public double getSize() { return size; } public void setSize(double size) { this.size = size; }}
测试方法:
public static void main(String[] args) { Generic gen = new Generic(); gen.setColor("red"); gen.setSize(100); Shop shop = new Shop(); shop.setName("baoma"); shop.setPrice(100000); shop.setGen(gen); Cart cart = new Cart(); cart.setCreater("Yves"); cart.setId(UUID.randomUUID().toString()); cart.setShop(shop); try { Cart cartClone = cart.clone(); System.out.println(cartClone == cart);// false System.out.println(cartClone.getShop() == cart.getShop());// false System.out.println(cartClone.getShop().getGen() == cart.getShop().getGen());// true: // 因为在Shop类中的成员Generic对象我没有实现克隆,系统默认是用的原来的引用. } catch (CloneNotSupportedException e) { e.printStackTrace(); } }
2.深层次克隆之串行化克隆
利用串行化来实现深层复制(也就是序列化和反序列化的方式)
阅读全文
0 0
- java对象克隆clone
- java 对象 克隆 clone
- Java clone()克隆对象
- JAVA 对象克隆clone
- java对象克隆clone
- Java 对象克隆(clone)
- Java| Java对象克隆Clone(2)
- Java| Java对象克隆Clone(1)
- java对象克隆之深度克隆 deep clone
- java克隆(Clone)
- java 克隆clone
- java Clone()克隆
- Java clone 克隆
- java (clone)克隆不容易
- java 克隆clone学习
- java 克隆 clone
- 【Java】Java中复制/克隆(Clone)一个对象
- JAVA对象任意深度克隆clone工具类分享
- 深度优先搜索从零突破
- FYN OI 奋斗之路8~
- Codeforces Round #435 (Div. 2)
- 【数学分析】BZOJ1041(HAOI2008)[圆上的整点]题解
- UVA
- Java| Java对象克隆Clone(2)
- 欢迎使用CSDN-markdown编辑器
- 清华第八战告捷!“路漫漫其修远兮,吾将上下而求索”……
- android tv box ---- 插入u盘直接播放指定文件夹中的视频
- 微信小程序入门bug--数据交互(从servlet中获取数据)
- [复习]树状数组 敌兵布阵
- activemq在windows和Linux系统下的安装
- PyTorch基本用法(十)——卷积神经网络
- C++ 动态数组