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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值