Draft Object Serialization Specification for records - construction/destruction
Peter Levart
peter.levart at gmail.com
Sun Oct 6 22:07:26 UTC 2019
On Sunday, October 6, 2019 11:38:42 PM CEST Peter Levart wrote:
> Hi Chris,
>
> I think that if stream values deserialize into a record through its public
> API (the canonical constructor which can be customized), then record
> components that are serailzed must also be obtained from a record via its
> public API (the accessors which can also be customized).
>
...above discussion also extends to the ObjectOutputStream.writeObject method
description that is currently written as:
"""If the object is a record object, the ObjectStreamClass for the class of
the record object is written by recursively calling writeObject. It will
appear in the stream only the first time it is referenced. A handle is
assigned for the record object.
The components of the record object are written to the stream.
a. If the record object is serializable or externalizable, the record
components are written, as if by invoking the `defaultWriteObject`
method.
b. If the object is neither serializable or externalizable, the
`NotSerializableException` is thrown.
The writeObject method then returns.
"""
So instead of "as if by invoking the `defaultWriteObject`, here you might want
to describe how component values are obtained, etc.
But I wanted to comment on another thing here: "a. If the record object is
serializable or externalizable, ..."
How could record be Externalizable? It would have to implement
writeExternal(ObjectOutput). No big deal. It would also have to have a public
no-arg constructor. No big deal. It would have to implement
readExternal(ObjectInput). Wait! How could a record type effectively implement
readExternal if all record fields are final?
Externalizable and records don't play together well, I think. If a record type
wishes to fully customize serialization format it still can designate a
serialization proxy (via writeReplace()) which can be an instance of a normal
Externalizable class for example.
Regards, Peter
More information about the amber-spec-experts
mailing list