RFR: 8371732: [redo] Change java.time month/day field types to 'byte' [v2]

Roger Riggs rriggs at openjdk.org
Mon Nov 17 14:50:19 UTC 2025


On Fri, 14 Nov 2025 20:15:03 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> Redo change (8371732) that failed when the updated class objects were incompatible.
>> The fields of classes are changed to allow a more compact form of storage.
>> 
>> To ensure compatibility of the class objects, the fields are explicitly declared in SerialPersistentFields with the original field types.
>> The fields are marked `transient` to indicate the field declarations are not used for serialization.
>> The affected classes are java.time.LocalDate, MonthDay, and YearMonth.
>> Tests are added to verify the types and names of serialized fields of each class.
>> 
>> HijrahDate only changes the field types, the fields are transient and there is no change to the serialized from of the HijrahDate.class object.
>
> Roger Riggs has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Use "Java SE 8" instead of version 1.8

Using transient everywhere should have been the preferred solution but compatibility wins any argument at this point.
The actual serialized form is defined by the combination of writeReplace and readResolve and its documentation.
The other doc/spec is just for documentation. if/when other classes are changed, similar care will be needed.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/28274#issuecomment-3542251560


More information about the core-libs-dev mailing list