Hi Chris,

On 10/7/19 5:37 PM, Chris Hegarty wrote:
Peter,

On 7 Oct 2019, at 15:17, Peter Levart <peter.lev...@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 )

On one hand, point 3 ensures that users serializing class C -> deserializing record C don't have to bother specifying explicit serialVersionUID for the record type, but OTOH it also gives false sense of assurance that new (record) serialization format is compatible with old (class) format for deserializing into instances of class. It does however cover a number of real-world use cases. So I'm not on one side or another about point 3.

Regards, Peter

Reply via email to