请先看完(二),这里直接该处解决办法,写一个CloneUtils(克隆工具)
package clone;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class CloneUtils {
@SuppressWarnings("unchecked")//告诉java编译器不要类型检查
public static<T extends Serializable> T clone(T obj) {
//拷贝产生的对象
T cobj = null;
try {
//读取对象字节数据
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);//写入内存
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());//从内存读取byte数组
ObjectInputStream ois = new ObjectInputStream(bais);
cobj =(T) ois.readObject();//从内存读取数据,类似拷贝
ois.close();
}catch(Exception e) {
e.printStackTrace();
}
return cobj;
}
}
pojo类:
package clone;
import java.io.Serializable;
public class Employee implements Serializable{
/**
* serialVersionUID 判断反序列化是否为同一对象,如此程序可正常升级,
* 如果不显示声明serialVersionUID,则会造成反序列化的对象和原来对象不匹配
*/
private static final long serialVersionUID = -4791800223225662659L;
private String name ;
private Employee boss;
public Employee(String _name) {
name = _name;
}
public Employee(String _name,Employee _boss) {
name = _name;
boss = _boss;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Employee getBoss() {
return boss;
}
public void setBoss(Employee boss) {
this.boss = boss;
}
}
如果你嫌麻烦,可以使用Apache下的commons工具包的SerializationUtils类