java深复制两种方式

java深复制两种方式

1 实现Cloneable接口

class S implements Cloneable
{
	/*
	 * 引用,get和set
	 * 
	 */
	T t;
	
	//双层克隆
	@Override
	public Object clone() throws CloneNotSupportedException
	{
		//此时还是浅复制 
		S S = (S)super.clone();
		//调用被引用对象的克隆方法
		S.setT((T)=S.getT().clone());
		return S;
	}
}
//被引用的类
class T implements Cloneable
{
	//属性,get和set
	
	//覆写克隆方法
	@Override
	public Object clone() throws CloneNotSupportedException
	{
		//调用父类克隆方法
		return super.clone();
	}
	
}

2 serializable方式实现

public class CloneTest3 {
	public static void main(String[] args) throws Exception
	{
		T T = new T();
		
		S s1 = new S();
		//s1.setT(t);
		
		S s2 = (S)s1.deepCopt();
	}
}
//被S引用的类
class T implements Serializable
{
//	这个serialVersionUID为了让该类别Serializable向后兼容
//	private static final long serialVersionUID = 1L;
//	private static final long serialVersionUID = 8940196742313994740L;
	/*
	 * 属性,get和set
	 */
}
	class S implements Serializable
	{
		//序列化id
		private static final long serialVersionUID = 1L;
		
		/*
		 * 各 引用(类已经实现序列化接口)
		 */
		T t;
		/*
		 * get和set
		 */
		
		//获取被深复制的对象
		public Object deepCopt()throws Exception
		{
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			ObjectOutputStream  oos = new ObjectOutputStream(bos);
			oos.writeObject(this);
			//将当前这个对象写到一个输出流当中,,因为这个对象的类实现了Serializable这个接口,若在这个类中
			//有一个引用,这个引用如果实现了序列化,那么这个也会写到这个输出流当中
			
			ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
			ObjectInputStream ois = new ObjectInputStream(bis);
			return ois.readObject();
			//这个就是将流中的东西读出类,读到一个对象流当中,这样就可以返回这两个对象的东西,实现深复制
		}
	}

参考自:https://blog.csdn.net/qq_28081081/article/details/80455150

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值