4 回答
TA贡献1779条经验 获得超6个赞
LZ采纳的方案是有明显局限的:被克隆的对象必须实现Serializable接口。
应付面试可能可以,但并不完美,更加完整的解决方案是自己写程序序列化对象。可以参考Hessian序列化过程。也可以参考各种Json框架,道理是一样的。
TA贡献1784条经验 获得超9个赞
你看下API的实现就明白了,原理就是通过字节码进行拷贝,说到底还是JAVA传参的影响,传递的实际是对象(非基本类型)的句柄。
说不能用API,没说不能和API实现的原理一样啊
TA贡献1850条经验 获得超11个赞
浅克隆
[code="java"]
public Object clone(){
return super.clone();
}
[/code]
深克隆
[code="java"]
public Object clone(){
Employee cloned = (Employee)super.clone();
cloned.dep = (Department)this.dep.clone();
//等等子对象
return cloned;
}
[/code]
流复制(需序列化)
[code="java"]
public Object deepClone()
{
ByteArrayOutoutStream bo=new ByteArrayOutputStream();
ObjectOutputStream oo=new ObjectOutputStream(bo);
oo.writeObject(this);
ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi=new ObjectInputStream(bi);
return(oi.readObject());
}
添加回答
举报