JDK 8: Closure Syntax Decision
According to Brian Goetz, the expert group for the JCP in charge of JSR 335 and JDK 8 overall has come to a decision. The syntax for Java Closures, a.k.a. Lambda expressions or Project Lambda, will be close to that of C# for the same subject. Some details are still being decided, but in general, the syntax should look similar to the following:
(x, y) => { System.out.println("The sum of x and y equals " + (x+y) ) };
The decisions behind this syntax involve:
- Appearance: It looks nice and reads well in most cases, even complex ones with multiple lines of code.
- Familiarity: The proposed alternatives were no better in terms of usability and readability, and many were worse. Going with a syntax that was already in use with C# and Scala, and therefore familiar to many developers already, was thought to be the best choice.
According to Goetz, a compiler implementation will be available soon. For more on Closures and Lambda expressions, see the Project Lambda page, Closures for Java, and the JDK 8 Project page.
FYI, the syntax for C# clostures/lambda expressions:
lambda = ArgList Arrow Body
ArgList = Identifier
| "(" Identifier [ "," Identifier ]* ")"
| "(" Type Identifier [ "," Type Identifier ]* ")"
Body = Expression
| "{" [ Statement ";" ]+ "}"

