在Hibernate中(特别是在第二级缓存中)实现了一种比序列化更快的替代方法。我不知道详细信息,但是您可以查看源代码。
您可能知道
clone()接口已损坏,因此最好避免使用,除非有确实令人信服的理由使用它。摘自Effective Java 2nd
Edition,第11条: 明智地覆盖克隆
考虑到与关联的所有问题
Cloneable,可以肯定地说其他接口不应该扩展它,并且为继承而设计的类(第17项)也不应实现它。由于它的许多缺点,一些专业的程序员只是选择永不重写该clone方法,也不要调用它,除非复制数组。如果您设计用于继承的类,请注意,如果您选择不提供行为良好的受保护clone
方法,则子类将无法实现Cloneable。
更新:浅/深克隆
从clone()API中:
创建并返回此对象的副本。“复制”的确切含义可能取决于对象的类别。[…]
按照惯例,此方法返回的对象应独立于该对象(正在克隆)。为了实现这种独立性,可能有必要在返回super.clone之前修改对象的一个或多个字段。通常,这意味着复制构成要克隆对象的内部“深度结构”的任何可变对象,并用对副本的引用替换对这些对象的引用。如果一个类仅包含原始字段或对不可变对象的引用,则通常情况是无需修改super.clone返回的对象中的任何字段。
因此,实际上,惯例是进行深层复制。
不过,首选的替代方法是定义一个复制构造函数或一个独立的方法,而不是覆盖
clone()。



