- 第一种实现Cloneable接口重写clone方法
- 第二种实现Serializable序列化,深度克隆
第一种:
package com.yanghs.test.clone;
import com.yanghs.common.entity.hbm.UserRole;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Collection;
/**
* @author yanghs
* @Description:
* @date 2018/3/14 21:28
*/
public class Userinfo implements Serializable,Cloneable {
private static final long serialVersionUID = 1L;
private String userid;
private String username;
private String password;
private Roleinfo roleinfo;
/**
* 重写Cloneable的clone方法,调用父类的clone方法实现浅克隆
* 实现深克隆需要再调用类中的属性的克隆方法实现深克隆
* @return
* @throws CloneNotSupportedException
*/
@Override
public Object clone() throws CloneNotSupportedException {
Userinfo o = (Userinfo) super.clone();
/*深度克隆对象属性*/
o.roleinfo = (Roleinfo) roleinfo.clone();
return o;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第二种
package com.yanghs.common.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* @author yanghs
* @Description:
* @date 2018年3月21日17:29:19
*/
public class SerializeUtil {
public static byte[] serialize(Object value) {
if (value == null) {
throw new NullPointerException("Can't serialize null");
}
byte[] rv = null;
ByteArrayOutputStream bos = null;
ObjectOutputStream os = null;
try {
bos = new ByteArrayOutputStream();
os = new ObjectOutputStream(bos);
os.writeObject(value);
os.close();
bos.close();
rv = bos.toByteArray();
} catch (Exception e) {
} finally {
close(os);
close(bos);
}
return rv;
}
public static Object deserialize(byte[] in) {
return deserialize(in, Object.class);
}
public static <T> T deserialize(byte[] in, Class<T>...requiredType) {
Object rv = null;
ByteArrayInputStream bis = null;
ObjectInputStream is = null;
try {
if (in != null) {
bis = new ByteArrayInputStream(in);
is = new ObjectInputStream(bis);
rv = is.readObject();
}
} catch (Exception e) {
} finally {
close(is);
close(bis);
}
return (T) rv;
}
private static void close(Closeable closeable) {
if (closeable != null)
try {
closeable.close();
} catch (IOException e) {
}
}
}