Serialization opt-in syntax (again)
Brian Goetz
brian.goetz at oracle.com
Fri Sep 28 11:47:34 PDT 2012
I put all the candidate syntaxes so far in the JIRA issue for this, but
a new one came to light this week that we kind of like.
The problem is: let's say you have a SAM that is not serializable, but
you want the instance to be, such as in:
Runnable r = () -> { };
The problem is that we really want to specify multiple interfaces for
the lambda, and as long as their intersection has only one abstract
method, that should be OK.
So, how about using the space between the closing paren and the arrow:
Runnable r = () implements Serializable -> { ... }
As a bonus, if we wanted to be explicit about all the implemented
interfaces, this easily extends to:
Object p = (String s) implements Predicate<String>, Serializable -> {
... }
This also extends nicely to inner class creation expressions. Right now
there is a limit of one named supertype. But this could be extended:
Predicate<String> p = new Predicate<String>() implements Serializable
{ ... }
In this case, there is no single-method restriction; you could implement
Iterator and Runnable if you wanted:
new Iterator<T>() implements Runnable { ... }
Note that none of this is serialization-specific; it is simply a way of
being explicit about multiple supertypes in contexts there this was not
previously allowed.
More information about the lambda-spec-experts
mailing list