RFR: 8313961: Enhance identification of special serialization methods [v2]
Raffaello Giulietti
rgiulietti at openjdk.org
Mon Aug 21 17:00:28 UTC 2023
On Mon, 21 Aug 2023 16:13:37 GMT, ExE Boss <duke at 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
More information about the core-libs-dev
mailing list