最简单的java 克隆实现

先定义一个标准的javabean对象,并实现持久化接口
请看代码:

package com.ben.clone;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Person implements Serializable
{

private int age;

private String name;

private char sex;

private List sth = new ArrayList();

private Map bt = new HashMap();

public int getAge()
{
return age;
}

public void setAge(int age)
{
this.age = age;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

public char getSex()
{
return sex;
}

public void setSex(char sex)
{
this.sex = sex;
}

public List getSth()
{
return sth;
}

public void setSth(List sth)
{
this.sth = sth;
}

public Map getBt()
{
return bt;
}

public void setBt(Map bt)
{
this.bt = bt;
}
}

再写个类实现二进制克隆对象:

package com.ben.clone;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ByteCloneTest
{
/**
* <pre>
* 以二进制方式克隆对象
* </pre>
* @param src 被克隆的对象
* @return 克隆的对象
*/
public static final Object byteClone(Object src)
{
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(src);
out.close();
ByteArrayInputStream bin = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bin);
Object clone = in.readObject();
in.close();
return (clone);
}
catch (ClassNotFoundException e)
{
throw new InternalError(e.toString());
}
catch (StreamCorruptedException e)
{
throw new InternalError(e.toString());
}
catch (IOException e)
{
throw new InternalError(e.toString());
}
}

public static void main(String[] args)
{
Person p = new Person();
p.setAge(80);
p.setName("jerry");
p.setSex('F');
List list = new ArrayList();
list.add("apple");
list.add("orange");
list.add("banana");
Map map = new HashMap();
map.put("哥哥", "liuliu");
map.put("姐姐", "linlin");
map.put("李李", "lili");
p.setBt(map);
p.setSth(list);
Person ps = (Person)ByteCloneTest.byteClone(p);
ps.setName("benlsoft");
System.out.println("p----"+p.getName());
System.out.println("ps---"+ps.getName());
}
}

发现两个克隆的对象包含的对象都不是引用对象。这样就实现了深度克隆,不敢想象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值