On Mon, 21 Aug 2023 16:13:37 GMT, ExE Boss <d...@openjdk.org> wrote:

>> Raffaello Giulietti has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   Removed a spurious, unintended file.
>
> 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`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/15364#discussion_r1300400056

Reply via email to