hutool提供了两种用克隆的方式, 但都是浅克隆的
浅克隆
1.实现Cloneable接口
/**
* 猫猫类,使用实现Cloneable方式
* @author Looly
*
*/
private static class Cat implements Cloneable<Cat>{
private String name = "miaomiao";
private int age = 2;
@Override
public Cat clone() {
try {
return (Cat) super.clone();
} catch (CloneNotSupportedException e) {
throw new CloneRuntimeException(e);
}
}
}
2.继承CloneSupport类
这样就不用自己去写clone方法了
/**
* 狗狗类,用于继承CloneSupport类
* @author Looly
*
*/
private static class Dog extends CloneSupport<Dog>{
private String name = "wangwang";
private int age = 3;
}
深克隆
深克隆hutool是用流来完成的, 就像下面这样:
ObjectUtil.cloneByStream(obj)
浅克隆: 复制出来的对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。
深克隆: 就是其他对象也实例化了新的对象, 不是指向原对象的;
要注意的是, 拷贝中涉及的所有类都要实现Serializable接口;
比如
public class Cat extends CloneSupport<Cat> implements Serializable {
public int num;
public Person master;
}
如果我想克隆一个Cat对象, 那么我不仅Cat要实现Serializable, 里面的对象Person也要实现Serializable, 感谢基于流的克隆, 其实不需要去实现Person的clone方法;