java 克隆 对象

java 克隆 对象

1.利用序列化和反序列化进行对象的深拷贝

不用实现clone,实现深度拷贝

package com.sinaif.model.admin;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import com.sinaif.model.enums.ArbitCaseStatusEnum;

public class BaseBean implements Serializable{
   

/**
 * 利用序列化和反序列化进行对象的深拷贝
 * @return
 * @throws Exception
 */
public Object deepClone() throws Exception{
    //序列化
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bos);
//        
        oos.writeObject(this);
        
    //反序列化
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    ObjectInputStream ois = new ObjectInputStream(bis);
    
    return ois.readObject();
}

//    public static void main(String[] args) {
//    	ArbitCaseBean case1 = new ArbitCaseBean();
//    	case1.setId("11111");
//    	case1.setCaptypeid("33343");
//    	
//    	try {
//    		ArbitCaseBean	case2 = (ArbitCaseBean) case1.deepClone();
//			case2.setId("22222");
//			System.out.println(case1.toString());
//			System.out.println(case2.toString());
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//    	
//	}
    
}

2.问题 :实现clone,为什么一定要implement Cloneable 接口

解答:

 类 Object 的 clone() 方法首先会检查 this.getClass() 是否实现了 Cloneable 接口。Cloneable 只是一个标志接口而已,
 用标志该类是否有克隆功能。如果 this.getClass() 没有实现 Cloneable 接口, clone() 就会抛CloneNotSupportedException 返回。
 参考:https://www.cnblogs.com/gw811/archive/2012/10/07/2712252.html  
 针java.lang.Object.clone()分析

实现clone需要注意:

  1. 在类的声明中加入“ implements Cloneable ”,标志该类有克隆功能;
  2. Override 类 Object 的 clone() 方法,在该方法中调用 super.clone() ,修改protected 为 public ,提升可见性:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值