On Mon, 21 Aug 2023 16:57:57 GMT, Raffaello Giulietti <[email protected]>
wrote:
>> src/java.base/share/classes/java/io/ObjectStreamClass.java line 1670:
>>
>>> 1668: ObjectStreamField[] serialPersistentFields = null;
>>> 1669: try {
>>> 1670: Field f = getDeclaredField(cl, ObjectStreamField[].class,
>>> "serialPersistentFields");
>>
>> This can technically be a breaking change, as it was supported for the field
>> to have a declared type that is assignable from `ObjectStreamField[]`, as
>> long as it held an `ObjectStreamField[]` instance at runtime, even if it
>> wasn’t officially supported.
>>
>>
>> class Example implements Serializable {
>> // This used to work before this patch in OpenJDK
>> private static final Object serialPersistentFields = new
>> ObjectStreamField[] {
>> // ...
>> };
>>
>> // ...
>> }
>
> True.
>
> On the other hand, what about a .class file that includes all of (pseudo-Java)
>
>
> private static final Object serialPersistentFields = new
> ObjectStreamField[0];
> private static final Cloneable serialPersistentFields = new
> ObjectStreamField[0];
> private static final Serializable serialPersistentFields = new
> ObjectStreamField[0];
> private static final ObjectStreamField[] serialPersistentFields = new
> SubclassOfObjectStreamField[0];
>
>
> Which one is the "preferred" field?
>
> Perhaps the Java Object Serialization Specification should simply prohibit
> multiple `serialPersistentFields`.
> This can technically be a breaking change, as it was supported for the field
> to have a declared type that is assignable from `ObjectStreamField[]`, as
> long as it held an `ObjectStreamField[]` instance at runtime, even if it
> wasn’t officially supported.
>
> ```java
> class Example implements Serializable {
> // This used to work before this patch in OpenJDK
> private static final Object serialPersistentFields = new
> ObjectStreamField[] {
> // ...
> };
>
> // ...
> }
> ```
That sort of behavior change would require a CSR; marking the PR accordingly.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/15364#discussion_r1302070033