深度克隆与序列化

时间:2014-07-21 11:04:46

标签: java clone

我很新并且学习java,我想在没有序列化的情况下执行深度克隆,我从互联网上阅读了一些文章,但仍然怀疑没有序列化的深度克隆。所以我想知道我还有其他任何规则吗按照做深度克隆,下面是我的程序

Department.java

package com.deepclone;

public class Department {
    private int id;
    private String name;


    public Department(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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



}

Employee.java

package com.deepclone;

public class Employee implements Cloneable {
    private String employeeId;
    private String empName;
    private Department department;

    public Employee(String employeeId, String empName, Department department) {
        this.employeeId = employeeId;
        this.empName = empName;
        this.department = department;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Employee employee = new Employee(employeeId, empName, new Department(
                department.getId(), department.getName()));
        return employee;
    }

    public String getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(String employeeId) {
        this.employeeId = employeeId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

}

TestCloning.java

    package com.deepclone;

public class TestClonning1 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Department hrDepartment = new Department(10, "HR");
        Employee employee = new Employee("1", "rajeev", hrDepartment);
        System.out.println(employee.getDepartment().getName());
        Employee cloneEmployee = (Employee) employee.clone();
        System.out.println(cloneEmployee.getDepartment().getName());
        cloneEmployee.getDepartment().setName("it");
        System.out.println(employee.getDepartment().getName());
        System.out.println(cloneEmployee.getDepartment().getName());
    }
}

输出

HR
HR
HR
it

除了序列化之外还有其他替代方法可以实现深度克隆吗?如果是,则给出链接。

1 个答案:

答案 0 :(得分:0)

试试这个Java Deep-Cloning Library

Cloner cloner = new Cloner();
MyClass other = ...;
MyClass clone = cloner.deepClone(other);