Does Scala AnyRef.clone perform a shallow or deep copy?

前端 未结 1 1274
难免孤独
难免孤独 2020-12-10 13:11

In Scala, does AnyRef.clone perform a shallow or deep copy?

相关标签:
1条回答
  • 2020-12-10 13:43

    Short answer: shallow.

    Not-so-short answer: Unless it's overridden, AnyRef.clone() uses the Java's Object.clone() as its implementation.

    Javadoc on Object.clone():

    The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown. Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.

    Please note:

    1. AnyRef.clone(), like its counterpart in Java, has a "protected" access level, so its not callable from everywhere.
    2. You will need to implement Cloneable in order for clone() to work.

    Long answer: Read Effective Java, 2nd Edition, Item 11: Override clone judiciously

    Summary: Don't use it. There are better alternatives.

    0 讨论(0)
提交回复
热议问题