为了账号安全,请及时绑定邮箱和手机立即绑定

IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API

IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API

森栏 2019-03-23 19:14:58
IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API。来吧,大家发表意见,全分奉上。
查看完整描述

4 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

LZ采纳的方案是有明显局限的:被克隆的对象必须实现Serializable接口。

应付面试可能可以,但并不完美,更加完整的解决方案是自己写程序序列化对象。可以参考Hessian序列化过程。也可以参考各种Json框架,道理是一样的。


查看完整回答
反对 回复 2019-04-26
?
千万里不及你

TA贡献1784条经验 获得超9个赞

你看下API的实现就明白了,原理就是通过字节码进行拷贝,说到底还是JAVA传参的影响,传递的实际是对象(非基本类型)的句柄。

说不能用API,没说不能和API实现的原理一样啊


查看完整回答
反对 回复 2019-04-26
?
慕盖茨4494581

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());
}

查看完整回答
反对 回复 2019-04-26
  • 4 回答
  • 0 关注
  • 476 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信