深拷贝
@Data
@ToString
class Book implements Cloneable {
Book(String name, Person owner) {
this.name = name;
this.owner = owner;
}
private String name;
private Person owner;
@Override
protected Object clone() throws CloneNotSupportedException {
Book clone = (Book) super.clone();
Person newOwner = (Person) this.owner.clone();
clone.setOwner(newOwner);
return clone;
}
}
@Data
@ToString
class Person implements Cloneable {
Person(int age) {
this.age = age;
}
private int age;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class ReferClone {
public static void main(String[] args) throws CloneNotSupportedException {
Person person = new Person(10);
Book book = new Book("abc", person);
Book bookClone = (Book) book.clone();
book.setName("cba");
book.getOwner().setAge(12);
System.out.println("book:" + book);
System.out.println("bookClone:" + bookClone);
}
}
执行结果
book:Book(name=cba, owner=Person(age=12))
bookClone:Book(name=abc, owner=Person(age=10))