On 8/15/2019 12:18 PM, Brian Goetz wrote:
Cloning: if a record class was to implement Cloneable, then the inherited implementation of Object::clone would not preserve copy equality (because, yes, cloning is not the same as copying). Recommend not implementing Cloneable?

We have an opportunity to do any of the following:

  - Prohibit cloning by making Record::clone final;
  - Be clone-agnostic by saying nothing;
 - Promote cloning by making Record implement Cloneable, and having an implementation of clone() either in Record.java, or having the compiler generate it according to the obvious component-copying formula.

j.l.Record's copy-equality property suggests that copying a record instance should be done neither by shallow-copy nor by deep-copy. Bringing Cloneable's shallow-copy into the picture muddies things up. My view isn't worth much here, but prohibition of cloning looks good to me.

Alex

Reply via email to