On Mon, 21 Aug 2023 16:57:57 GMT, Raffaello Giulietti <rgiulie...@openjdk.org> 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