序列化 - 实现深度克隆

package clone;


import java.io.*;

public class Student implements Serializable{
    private static final long serialVersionUID = 0;

    private String name;
    private int age;
    private Teacher teacher;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", teacher=" + teacher +
                '}';
    }

    public Student(String name, int age, Teacher teacher) {
        this.name = name;
        this.age = age;
        this.teacher = teacher;
    }

    public Object deepClone() throws IOException, ClassNotFoundException {
        //序列化
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(this);
        //反序列化
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bais);
        return ois.readObject();
    }
}
package clone;

import java.io.Serializable;

public class Teacher implements Serializable{
    private static final long serialVersionUID = 1;
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
package clone;

import java.io.IOException;

public class DeepCloneDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Teacher teacher = new Teacher("李老师",44);

        Student student1 = new Student("同学1",11,teacher);

        Student student2 = (Student) student1.deepClone();
        student2.getTeacher().setName("红老师");

        System.out.println(student1);
        System.out.println(student2);
        System.out.println(student1 == student2);

    }
}

猜你喜欢

转载自blog.csdn.net/qq_26857649/article/details/81873180