Never mind, Eclipse bug (sigh) “The truth is rarely pure and never simple.” ― Oscar Wilde
On Fri, May 23, 2014 at 4:38 PM, tetsuo <ronald.tet...@gmail.com> wrote: > I'm using Java 8 lambdas with Wicket, and they make it really simple > to have almost 100% type-safe code, without the verbosity of anonymous > inner classes. With a few adapter classes and interfaces, it was > relatively easy to integrate them. > > But I'm having some non-trivial problems with serialization. I think > it's a bug in the compiler, but I'm curious if someone else has seen > this: > > > public class TestClass implements Serializable { > String msg = "HEY!"; > SerializableRunnable runnable; > public TestClass() { > TestClass self = this; > runnable = () -> self.say(); // uses a local copy of 'this' > // runnable = () -> this.say(); // uses 'this' directly > } > public void say() { > System.out.println(msg); > } > public static void main(String[] args) throws Exception { > ByteArrayOutputStream buffer = new ByteArrayOutputStream(); > try (ObjectOutputStream out = new ObjectOutputStream(buffer)) { > out.writeObject(new TestClass()); > } > try (ObjectInputStream in = new ObjectInputStream(new > ByteArrayInputStream(buffer.toByteArray()))) { > TestClass s = (TestClass) in.readObject(); > s.say(); > } > } > } > interface SerializableRunnable extends Runnable, Serializable { > } > > > The above code runs fine, but if I use the commented line to > initialize the runnable (using 'this' directly instead of a local > variable), the in.readObject() call throws an excetion > ('java.lang.IllegalArgumentException: Invalid lambda > deserialization'). The object is serialized, but can't be > deserialized. > > That is, lambdas are correctly serialized when it only uses the local > scope, but if it tries to use the enclosing class directly (methods or > attributes), it fails. I mean, it compiles, it works, it can access > them, but if serialized, it can't be deserialized. > > Obviously, it makes it very inconvenient to use with Wicket, which > uses serialization extensively. > > I already submited a bug to Oracle. Do you agree that it looks like a bug?