Summary
-------
Describe allowable types of evolution compatible changes to serializable
record classes.
Problem
-------
The record-specific Java Object Serialization specification is silent on
the types of changes that can be made to record classes while
maintaining compatibility with preview serial versions.
Solution
--------
In subsection 5.6.2 - "Compatible Changes", add allowable types of
evolution compatible changes that can be made to serializable record
classes.
Specification
-------------
### 5.6.2 Compatible Changes
...
- Adding or removing a record component - When the record object being
reconstituted has a record component that does not occur in the stream, the
record class's canonical constructor will be passed the default value for
its type. If specific initialization is needed, the constructor can
initialize the component to a non-default value. Stream field values not
passed to the canonical constructor are effectively discarded.
- Changing a class from an ordinary class to a record class - A class that is
suitable to be converted from an ordinary class to a record class, and
relies on default serialization, may be changed to a record class. The
ordinary class should have `java.lang.Object` as its direct superclass, or
otherwise have no serializable state in its superclasses. The name and type
of the record class's components must match that of the name and type of the
ordinary class's serializable fields. Record objects are reconstructed
through the record class's canonical constructor. If the canonical
constructor throws an exception, say while checking invariants, then an
`InvalidObjectException` is thrown.
- Changing a class from a record class to an ordinary class - A record class
that relies on default serialization, may be changed to an ordinary class.
The ordinary class must declare an explicit `serialVersionUID`, whose value
is the same as that of the prior record class's `serialVersionUID`, or
`0L` if the prior record class does not have an explicit `serialVersionUID`
declaration. The name and type of the ordinary class's serializable fields
must match that of the name and type of the prior record class's components.
Viewable online at:
https://cr.openjdk.java.net/~chegar/records/spec/records-serialization-addendum.html