JAVA复制对象给另一个对象
2016-06-25 22:40
525 查看
JAVA复制对象给另一个对象
标签: javahibernateobject2012-03-23 16:46 14881人阅读 评论(0) 收藏 举报
分类:
J2SE(113)
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天算是遇到一个问题了。相当苦恼。
需求如下:有2个相同id的对象,但它们的值不同。其中一个对象要用到另一个对象的属性值。
由于在hibernate的sessionFactory().getSession中不能存在2个相同id的对象。故此,想出复制对象。
找了很多地方,发现有2种方法可以达到复制对象的目的,只是最后这种方法还是没有解决我的问题。仅此记下来吧。
1,克隆clone
Java支持克隆一个对象的值到另一个对象,简单的克隆和深度克隆,深度克隆可能包括继承,嵌套,没有用到,所以也就没怎么去研究它。
首先,克隆的对象需要实现 Cloneable接口,重写其中的clone()方法,为了使clone()方法在外部可用,需要将重写的方法访问修饰符改成public级别。
[java] view
plain copy
print?
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
[java] view
plain copy
print?
dv=(Deliverymanreport)deliverymanreport.clone();//克隆对象
dv是deliverymanreport克隆的一个对象。它拥用克隆后的属性和方法。
2,序列化和反序列化Serializable
序列化的对象要实现Serializable接口才能实现序列化。
序列化后,通过反序列化可以得到和当前对象一样的对象。它比克隆来得更准备。但也就不一定最好,如果这个对象在之前被修改,序列化后可能就会出问题了。
[java] view
plain copy
print?
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out= new ObjectOutputStream(byteOut);
out.writeObject(deliverymanreport);//写对象,序列化
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
dv=(Deliverymanreport)in.readObject(); //读对象,反序列化
序列化经常用于文件传递的读取。尤其是在缓存中用得比较多,通过序列化可以将对象缓存在硬盘中。这在登录系统缓存用户权限和角色等信息最常见。而用对克隆对象,也不失为一种很好的方法。
相关文章推荐
- Sitemesh Demo
- Springmvc 学习总结---AOP 和 IOC
- Java教程(源码+PPT)
- Struts2系列:(12)拦截器
- Java中的异常处理机制的简单原理和应用
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)
- Cookie/Session机制详解
- spring如何处理表单数据
- 从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0
- java学习笔记之—多态
- Java基本概念和使用原则
- 深入理解Java的接口和抽象类
- java文件上传和下载
- SpringMVC工作原理
- springmvc注解开发-validation校验-分组校验
- java学习笔记之—接口和抽象类
- SortedSet和TreeSet
- java Strin 4000 g.format使用问题
- Java基础知识学习笔记(一)
- How to fix Cannot change version of project facet Dynamic Web Module to 3.0 Error in Eclipse---转载