hutool_克隆

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方法;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章