`
448278806
  • 浏览: 2491 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

模拟对象深/浅克隆效果

阅读更多
采纳的答案





Java代码 
1.import java.io.ByteArrayInputStream; 
2.import java.io.ByteArrayOutputStream; 
3.import java.io.ObjectInputStream; 
4.import java.io.ObjectOutputStream; 
5. 
6./**
7. * 深/浅克隆
8. * 
9. * @author JohnGao
10. */ 
11.public class CloneTest 
12.{ 
13.    /**
14.     * 模拟对象深/浅克隆效果
15.     * 
16.     * @author JohnGao
17.     * 
18.     * @param T: 目标克隆对象
19.     * 
20.     * @throws Exception
21.     * 
22.     * @return T: 克隆对象
23.     */ 
24.    public static <T> T clone(T t) throws Exception  
25.    { 
26.        /* 实例化字节数组节点流 */ 
27.        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
28.        ObjectOutputStream objectOutputStream = new ObjectOutputStream( 
29.                byteArrayOutputStream); 
30.         
31.        /* 将目标克隆对象转换成数组 */ 
32.        objectOutputStream.writeObject(t); 
33.         
34.        /* 返回克隆对象 */ 
35.        return (T) new ObjectInputStream(new ByteArrayInputStream( 
36.                byteArrayOutputStream.toByteArray())).readObject(); 
37.    } 
38.} 





Java代码 
1.public int age; 
2.    public StringBuffer str = new StringBuffer(); 
3.     
4.    @Test 
5.    public void test() throws Exception 
6.    { 
7.        MyTest myTest1 = new MyTest(); 
8.        MyTest myTest2 = CloneTest.clone(myTest1); 
9.        System.out.println("myTest1.hashcode: " + System.identityHashCode(myTest1)); 
10.        System.out.println("myTest2.hashcode: " + System.identityHashCode(myTest2)); 
11.        myTest2.age = 15; 
12.        System.out.println("myTest1.age: " + myTest1.age); 
13.        System.out.println("myTest2.age: " + myTest2.age); 
14.        myTest1.str.append("++++"); 
15.        myTest2.str.append("----"); 
16.        System.out.println("myTest1.str: " + myTest1.str); 
17.        System.out.println("myTest2.str: " + myTest2.str); 
18.    } 
分享到:
评论

相关推荐

    实时克隆

    在C++中,我们可以利用对象的深拷贝或浅拷贝来模拟实时克隆。深拷贝会复制对象的所有成员,包括动态分配的内存,确保两个对象互不干扰。浅拷贝则只复制对象的引用,可能导致两个对象共享同一块内存,这在需要独立...

    信号克隆

    这可以通过浅拷贝(只复制引用)或深拷贝(复制所有层级的数据)来实现。 6. **Custom Events**:JavaScript允许开发者自定义事件,这可以模拟“信号克隆”的行为。通过创建一个新的事件类型并手动触发,可以在不...

    前端基础学习笔记,pdf

    还有对象属性遍历、this关键字的用法、错误处理、对象克隆(浅拷贝和深拷贝)等深入话题。 总的来说,这份学习笔记全面覆盖了前端开发的基础,从JavaScript语言特性到实际应用场景,再到Node.js和前端框架的介绍,...

    instaClone

    在JavaScript中,克隆可以是浅复制(shallow copy),即只复制对象的表面属性,而深层引用(如对象内部的其他对象)不会被复制。深复制(deep copy)则会递归复制所有嵌套的对象和数组。这个项目可能使用了JSON....

    CloneTest

    2. **深拷贝与浅拷贝**:在进行对象复制时,可能会遇到深拷贝和浅拷贝的概念。深拷贝会创建一个新的对象,包含原始对象的所有属性的新实例,包括嵌套的对象。浅拷贝则只会复制对象的引用,而不是对象本身。CloneTest...

    picobricks:lua中的突破克隆,用于pico-8

    在传统的Lua中,对象的复制通常是浅复制,这意味着新创建的对象只会在表层上有所不同,而底层数据结构依然共享。这在处理大量独立个体时可能会导致意外的行为,因为它们之间的状态可能会相互影响。picobricks通过...

    ActionScript3.0开发人员指南

    - **克隆数组**:了解如何创建数组的深拷贝或浅拷贝,避免数据意外共享导致的错误。 - **扩展Array类**:学习如何通过继承`Array`类来添加自定义功能,增强数组的灵活性和功能性。 - **数组示例:播放列表**:通过...

    2022年抽象类和接口2.ppt

    不过需要注意的是,`clone()` 方法默认只是浅复制,对于复杂的数据结构,可能需要重写 `clone()` 方法实现深复制。 **包装类** 是Java为每个基本数据类型提供的对应的类,例如 `Integer` 对应 `int`,`Double` 对应...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例110 Java对象的浅克隆 135 实例111 Java对象的深克隆 137 实例112 序列化与对象克隆 139 实例113 深克隆效率的比较 141 实例114 transient关键字的应用 143 5.7 接口和内部类 145 实例115 使用sort()方法排序 ...

Global site tag (gtag.js) - Google Analytics