Draft Object Serialization Specification for records - serialVersionUID

Chris Hegarty chris.hegarty at oracle.com
Mon Oct 7 15:37:28 UTC 2019


> On 7 Oct 2019, at 15:17, Peter Levart <peter.levart at gmail.com> wrote:
> ...
> I was thinking of the following scenario:
> - there is a record-like class C with serialVersionUID != 0 in a library version v1
> - new version of library v2 migrates this class C into record C
> - there are two network peers A and B that communicate using serialized C. A is using library version v1, B is using library version v2. Can they communicate?

One way, yes. Both ways, no.

> An example from a real world:
> Library v1 can in reality be JDK N
> Library v2 can in reality be JDK N+1

Good scenario. I like to think of this as the N-1 scenario ( rather than N+1 ;-) )

So, similar to what you previously suggested, maybe:
 1) Allow the serialVersionUID to be explicitly declared in a record ( to support the above cross-release interoperability ).
 2) The default would still be 0L, and the typical record author ( not caring about cross-release interoperation ) will not need to declare it.
 3) When the local class is a record, the serialVersionUID is effectively ignored when deserializing ( no checks ) 


More information about the amber-spec-experts mailing list