博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DeepCopy
阅读量:4203 次
发布时间:2019-05-26

本文共 2972 字,大约阅读时间需要 9 分钟。

DeepCopy util:

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import net.sf.json.JSONObject;public class DeepCopy {      /**      * 深层拷贝      *       * @param 
* @param obj * @return * @throws Exception */ public static
T copy(T obj) throws Exception { //是否实现了序列化接口,即使该类实现了,他拥有的对象未必也有... if(Serializable.class.isAssignableFrom(obj.getClass())){ //如果子类没有继承该接口,这一步会报错 try { return copyImplSerializable(obj); } catch (Exception e) { //这里不处理,会运行到下面的尝试json } } //如果序列化失败,尝试json序列化方式 if(hasJson()){ try { return copyByJson(obj); } catch (Exception e) { //这里不处理,下面返回null } } return null; } /** * 深层拷贝 - 需要类继承序列化接口 * @param
* @param obj * @return * @throws Exception */ @SuppressWarnings("unchecked") public static
T copyImplSerializable(T obj) throws Exception { ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; ByteArrayInputStream bais = null; ObjectInputStream ois = null; Object o = null; //如果子类没有继承该接口,这一步会报错 try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(obj); bais = new ByteArrayInputStream(baos.toByteArray()); ois = new ObjectInputStream(bais); o = ois.readObject(); return (T) o; } catch (Exception e) { throw new Exception("对象中包含没有继承序列化的对象"); } finally{ try { baos.close(); oos.close(); bais.close(); ois.close(); } catch (Exception e2) { //这里报错不需要处理 } } } /** * 是否可以使用json * @return */ private static boolean hasJson(){ try { Class.forName("net.sf.json.JSONObject"); return true; } catch (Exception e) { return false; } } /** * 深层拷贝 - 需要net.sf.json.JSONObject * @param
* @param obj * @return * @throws Exception */ @SuppressWarnings("unchecked") public static
T copyByJson(T obj) throws Exception { return (T)JSONObject.toBean(JSONObject.fromObject(obj),obj.getClass()); } }

调用:

preFpd = DeepCopy.copy(fpd);
对象需要implement Serializable:

public class Fpd implements Serializable {		private static final long serialVersionUID = 1L;	// ...
参考:

http://blog.csdn.net/isea533/article/details/9375907

你可能感兴趣的文章
Glide源码分析 及 Glide + picasso+ fresco 区别 和Gilde圆形图片等。
查看>>
Android 的图片压缩
查看>>
屏幕适配(三分钟搞定)
查看>>
Android沉浸式状态栏(非常简单)
查看>>
Android 轮播指示器变大
查看>>
Android Studio 一直在不停的build 不停的刷新
查看>>
Android 自定义View 添加到 ScrollView 不显示
查看>>
Android SharedPreferences 保存数据最基本用法
查看>>
Kotlin历史
查看>>
Storm -- 1
查看>>
Mac 常用优秀工具
查看>>
如何做Code Review
查看>>
数据中台简介
查看>>
跨前端开发技术
查看>>
包管理工具
查看>>
Linux常用指令
查看>>
Kafka 使用汇总
查看>>
大数据学习路线
查看>>
Kafka跨网闸,使用映射地址无法连接
查看>>
数据库基础-表
查看>>