【发布时间】:2011-01-20 13:41:14
【问题描述】:
我需要在我的一个没有超类的对象中实现深度克隆。
处理超类(即Object)抛出的已检查CloneNotSupportedException 的最佳方法是什么?
一位同事建议我按以下方式处理:
@Override
public MyObject clone()
{
MyObject foo;
try
{
foo = (MyObject) super.clone();
}
catch (CloneNotSupportedException e)
{
throw new Error();
}
// Deep clone member fields here
return foo;
}
这对我来说似乎是一个很好的解决方案,但我想把它扔给 StackOverflow 社区,看看是否还有其他可以包含的见解。谢谢!
【问题讨论】:
-
如果你知道父类实现了
Cloneable,那么抛出一个AssertionError而不仅仅是一个普通的Error更有表现力。 -
编辑:我宁愿不使用 clone(),但项目已经基于它,此时不值得重构所有引用。
-
最好现在咬紧牙关而不是以后(好吧,除非您即将投入生产)。
-
我们距离完成还有一个半月的时间。我们无法证明时间的合理性。
-
我认为这个解决方案是完美的。并且不要对使用克隆感到难过。如果您有一个用作传输对象的类,并且它只包含原始数据和不可变数据,如 String 和 Enums,那么由于教条的原因,除了 clone 之外的所有内容都将完全浪费时间。请记住克隆做什么和不做什么! (没有深度克隆)
标签: java clone cloning cloneable