Draft JLS spec for records
chris.hegarty at oracle.com
Mon Aug 26 13:43:14 UTC 2019
On 23/08/2019 22:25, Gavin Bierman wrote:
> A draft language spec for records is available at:
"It is a compile-time error for a record header to declare a record
component with the name clone, finalize, getClass, hashCode, notify,
notifyAll, readObjectNoData, readResolve, serialPersistentFields,
toString, wait, or writeReplace."
TL;DR from a serialization POV, I think the above list is fine.
Specifically on the restricted component names coming from serialization.
The complete list of java.io.Serializable magic members:
private void writeObject(java.io.ObjectOutputStream out) throws ..
private void readObject(java.io.ObjectInputStream in) throws ..
private void readObjectNoData() throws ..
ANY-ACCESS-MODIFIER Object writeReplace() throws ..
ANY-ACCESS-MODIFIER Object readResolve() throws ..
private static final ObjectStreamField serialPersistentFields
ANY-ACCESS-MODIFIER static final long serialVersionUID
Ok, so you have all three no-args methods, looks fine, no possible
collision between component accessor and the magic method. We could
however decided to just ban both readObject and writeObject, as they
could be confusing to the reader. But if it is just a minimal list of
no-args methods, then what you have is fine.
The listing of serialPersistentFields seems fine too, again possible
collision with the record component field.
serialVersionUID is static, so doesn't need to need to be listed. Ok.
java.io.Externalizable is a lot less magic
void readExternal(ObjectInput in)
void writeExternal(ObjectOutput out)
There are no no-args methods, good. If we decided to ban readObject and
writeObject above, then we could consider banning these two component
names also ( for the same reason we would ban the former ).
Typo: there are two occurrences of "an record".
More information about the amber-spec-experts