栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

两种方式实现深拷贝

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两种方式实现深拷贝

原理:把对象序列化成流,再从流反序列化成对象,这样就是新的对象了。

事前准备:

@Data
public class ItWorker  {
    private String name;
    private String sex;
    private LiveAddress address;
}
@Data
public class LiveAddress  {
    private String province;
    private String city;
    private String area;
}

方式一:通过json工具序列化,把对象序列化成json字符串,然后再从字符串反序列化成对象,从而实现深拷贝。

public static void main(String[] args) {
    ItWorker itWorker = new ItWorker();
    itWorker.setName("法外狂徒张三");
    itWorker.setSex("男");

    LiveAddress liveAddress = new LiveAddress();
    liveAddress.setProvince("江苏");
    liveAddress.setCity("苏州");
    liveAddress.setArea("独墅湖");
    itWorker.setAddress(liveAddress);

    ItWorker deepItWorker = JSON.parseObject(JSON.toJSonString(itWorker), ItWorker.class);
    deepItWorker.getAddress().setCity("南京");

    System.out.println(itWorker);
    System.out.println(deepItWorker);

}

输出:

ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=苏州, area=独墅湖))
ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=南京, area=独墅湖))

方式二:使用Apache Commons Lang中提供的SerializationUtils工具实现深拷贝。

前提:实现Serializable

public class ItWorker implements Serializable 
public class LiveAddress implements Serializable
public static void main(String[] args) {
    ItWorker itWorker = new ItWorker();
    itWorker.setName("法外狂徒张三");
    itWorker.setSex("男");

    LiveAddress liveAddress = new LiveAddress();
    liveAddress.setProvince("江苏");
    liveAddress.setCity("苏州");
    liveAddress.setArea("独墅湖");
    itWorker.setAddress(liveAddress);

    ItWorker deepClone = (ItWorker) SerializationUtils.clone(itWorker);
    deepClone.getAddress().setCity("峨眉山");
    System.out.println(itWorker);
    System.out.println(deepClone);

}

输出:

ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=苏州, area=独墅湖))
ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=峨眉山, area=独墅湖))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号