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