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