Java 不进行序列化的深度克隆

Java 不进行序列化的深度克隆,java,clone,Java,Clone,我是一名非常新的java学习者,我想在没有序列化的情况下执行深度克隆,我在互联网上读了一些文章,但仍然对没有序列化的深度克隆表示怀疑。所以我想知道,在进行深度克隆时,我还需要遵循其他规则吗,下面是我的程序 Department.java Employee.java TestCloning.java 输出 除了实现无序列化的深度克隆,还有其他选择吗?如果有,请提供链接。试试这个 我没看到你做任何连载?!没有任何其他方法……简单的方法似乎更像是一个没有实际用途的哲学问题,因为深度克隆总是会带来缺点和

我是一名非常新的java学习者,我想在没有序列化的情况下执行深度克隆,我在互联网上读了一些文章,但仍然对没有序列化的深度克隆表示怀疑。所以我想知道,在进行深度克隆时,我还需要遵循其他规则吗,下面是我的程序

Department.java Employee.java TestCloning.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;
    }



}
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;
    }

}
    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
Cloner cloner = new Cloner();
MyClass other = ...;
MyClass clone = cloner.deepClone(other);