我需要在我的一个没有超类的对象中实现深度克隆.
处理CloneNotSupportedException超类抛出的检查的最佳方法是什么(是Object)?
一位同事建议我按以下方式处理:
@Override
public MyObject clone()
{
MyObject foo;
try
{
foo = (MyObject) super.clone();
}
catch (CloneNotSupportedException e)
{
throw new Error();
}
// Deep clone member fields here
return foo;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎是一个很好的解决方案,但我想把它扔到StackOverflow社区,看看是否还有其他任何我可以包含的见解.谢谢!
请考虑以下有效Java项目11(明智地覆盖克隆),其中Josh Bloch正在解释clone()合同的错误.
这份合同存在许多问题."没有被称为构造函数"的规定过于强烈.一个行为良好的克隆方法可以调用构造函数来创建正在构建的克隆内部的对象.如果类是final,clone甚至可以返回由构造函数创建的对象.
有人可以解释Josh Bloch在第一段中所说的"如果类是final,clone甚至可以返回由构造函数创建的对象".这里final有什么关系clone()?