Java实现对象深拷贝工具类的方法和示例代码

分类:知识百科 日期: 点击:0

Java实现对象深拷贝是一种技术,它可以将一个对象的内容完全拷贝到另一个对象中,从而实现对象的深拷贝。Java提供了一种实现对象深拷贝的工具类,可以方便地实现对象的深拷贝。

使用方法

为了使用Java实现对象深拷贝工具类,需要引入相应的类库:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

可以使用以下代码实现对象的深拷贝:

public static Object deepClone(Object object) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bos);
    oos.writeObject(object);
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    ObjectInputStream ois = new ObjectInputStream(bis);
    return ois.readObject();
}

上面的代码可以将一个对象的内容完全拷贝到另一个对象中,从而实现对象的深拷贝。

示例代码

下面是一个示例代码,它可以实现对象的深拷贝:

public class DeepClone {
    public static void main(String[] args) {
        Person person1 = new Person(1, "John");
        Person person2 = (Person) deepClone(person1);
        System.out.println("person1: " + person1);
        System.out.println("person2: " + person2);
    }
 
    public static Object deepClone(Object object) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(object);
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return ois.readObject();
    }
 
    static class Person implements Serializable {
        private int id;
        private String name;
 
        public Person(int id, String name) {
            this.id = id;
            this.name = name;
        }
 
        @Override
        public String toString() {
            return "Person{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
}

上面的代码实现了对象的深拷贝,它可以将一个对象的内容完全拷贝到另一个对象中,从而实现对象的深拷贝。

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。