I can serialize a lambda with the following syntax:
Runnable r = (Runnable & Serializable) () -> System.out.println("");
try (ObjectOutput oo = new ObjectOutputStream(new ByteArrayOutputStream())) {
oo.writeObject(r);
}
However if I receive the lambda from a client code and it has not been cast appropriately, I can't serialize it.
How can I serialize r
below without changing its definition:
Runnable r = () -> System.out.println("");
I have tried to serialize a "derived" object:
Runnable r1 = (Runnable & Serializable) r::run;
Runnable r2 = (Runnable & Serializable) () -> r.run();
but in each case, oo.writeObject(rxxx);
fails with a NotSerializableException
.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…