On Thu, Jun 13, 2024 at 8:39 AM Alan Bateman <alan.bate...@oracle.com>
wrote:

> On 12/06/2024 15:23, David Lloyd wrote:
>
>
> :
> .
>
> I have a *very* rough prototype up [1]. It adds two new accessor methods
> to `ReflectionFactory`: `defaultReadObjectForSerialization` and
> `defaultWriteObjectForSerialization`. It was easier than expected, due
> largely to the classfile API, which is really nice.
>
> These methods create an artificial `readObject`/`writeObject` method in a
> hidden+nestmate class connected to the original class, which uses the
> stream's `GetField`/`PutField` to access the stream data and normal field
> operations to access the class fields. For usage, these methods can be used
> when `read|writeObjectForSerialization` return `null`, *or* when
> `defaultRead|WriteObject` is used.
>
> Good to hear you've got a prototype to discuss. I don't think I can look
> at what you have in your own repo but I do have a question. Do the
> defaultXXX methods return a method handle or do they fail/null when there
> are read/writeObject methods? Asking if they will bypass these methods.
>

They will still return a method handle in this case. The method handle
doesn't *bypass* the provided methods - per se - for example if the fields
in question are `transient` then these methods would not access them. But,
I could not think of any other way to deal with the
`defaultReadObject`/`defaultWriteObject` situation than to allow
serialization libraries to do this (where the OIS/OOS implementation is
being asked by the serialized class to read or write the field values
from/to the serialization stream). Maybe you have another idea?

-- 
- DML • he/him

Reply via email to