java对象深拷贝-

前几天遇到一个需求,需要将java对象复制下,但是总是复制的引用。而不是只复制对象的属性值。如果对象还包含另一个对象。就更麻烦了。

package com.sunlands.community.common.entity;

import java.io.*;

public class TestDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String field1;
    private String field2;
    private InnerDTO innerDTO;

    public String getField2() {
        return field2;
    }

    public void setField2(String field2) {
        this.field2 = field2;
    }

    public String getField1() {
        return field1;
    }

    public void setField1(String field1) {
        this.field1 = field1;
    }

    public InnerDTO getInnerDTO() {
        return innerDTO;
    }

    public void setInnerDTO(InnerDTO innerDTO) {
        this.innerDTO = innerDTO;
    }

    public Object deepClone() throws IOException, OptionalDataException,
            ClassNotFoundException {
        // 将对象写到流里
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = new ObjectOutputStream(bo);
        oo.writeObject(this);
        // 从流里读出来
        ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
        ObjectInputStream oi = new ObjectInputStream(bi);
        return (oi.readObject());
    }
}

 

package com.sunlands.community.common.entity;

import java.io.*;

/**
 * Created by 67534 on 2018/11/2.
 */
public class InnerDTO  implements Serializable {
    private static final long serialVersionUID = 1L;
    private String data1;
    private String data2;

    public String getData1() {
        return data1;
    }

    public void setData1(String data1) {
        this.data1 = data1;
    }

    public String getData2() {
        return data2;
    }

    public void setData2(String data2) {
        this.data2 = data2;
    }

    public Object deepClone() throws IOException, OptionalDataException,
            ClassNotFoundException {
        // 将对象写到流里
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = new ObjectOutputStream(bo);
        oo.writeObject(this);
        // 从流里读出来
        ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
        ObjectInputStream oi = new ObjectInputStream(bi);
        return (oi.readObject());
    }
}

 

深拷贝执行代码:

 

TestDTO testDto = new TestDTO();

TestDTO testDtoTemp= (TestDTO)testDto.deepClone();

 

 

对象包含的类也需要实现deepClone方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值