Scala AnyRef.clone执行浅或深拷贝吗?

时间:2009-08-12 16:28:51

标签: scala clone

在Scala中,AnyRef.clone执行浅或深拷贝吗?

1 个答案:

答案 0 :(得分:21)

简短回答:浅薄。

不那么简短的回答: 除非被覆盖,否则AnyRef.clone()使用Java的Object.clone()作为其实现。

Object.clone()上的Javadoc:

  

类Object的方法clone   执行特定的克隆操作。   首先,如果是这个对象的类   没有实现接口   克隆,然后一个   抛出CloneNotSupportedException。   请注意,所有数组都被认为是   实现Cloneable接口。   否则,此方法会创建一个新的   此对象的类的实例   并初始化其所有字段   确切的内容   该对象的相应字段,   仿佛是通过转让;的内容   这些田地本身不是克隆的。   因此,该方法执行“浅   复制“这个对象,而不是”深   复制“操作。

请注意:

  1. AnyRef.clone()与Java中的对应物一样,具有“受保护”的访问级别,因此可以从任何地方调用。
  2. 您需要实现Cloneable才能使clone()正常工作。
  3. 长答案:阅读 Effective Java,第2版,第11项:明智地覆盖克隆

    摘要:不要使用它。有更好的选择。