> On 26 Mar 2019, at 07:54, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> Hi Seth,
> 
> I think you stumbled on a "defect" of Java Serialization mechanism. Namely, 
> the inability for it to correctly deserialize object graphs containing a 
> cycle when an object in such cycle uses the "readResolve()" special method to 
> replace the deserialized object with a replacement object. SerializedLambda 
> is a class with instances that are 1st deserialized from stream then 
> "replaced" with real lambda objects via the "readResolve()" method which 
> constructs and returns the "real" lambda object. The deserialized 
> SerializedLambda object is nevertheless attempted to be (temporarily) 
> assigned to the field that would hold the final lambda object, which fails as 
> the filed is of different type than SerializedLambda (or supertype).
> 
> You can check my claims by changing the type of the field holding the lambda 
> to java.lang.Object and see if it works... (It should if my memory serves me 
> well :-)
> 
> This is a known defect of Java serialization and is not specific to 
> serialized lambda.

Correct. Cycles in the object graph can be problematic when mixed with
Serializable classes that have a readResolve method or the follow the
Serialization Proxy Pattern. The Immutable Collection implementations
are another such example.

I see David pointed to some specific unresolved issues relating to
Serializable lambdas. I haven't looked into them.

-Chris.

Reply via email to