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