Fwd: JEP draft: Concise Method Bodies - extend this to local functions?

Brian Goetz brian.goetz at oracle.com
Wed Sep 19 22:23:39 UTC 2018


This was received from the suggestion box …


My thoughts on this: local functions are a potentially useful feature, and one that interacts nicely with the concise form, but the two features are orthogonal; there’s nothing to be gained by doing them together that is not gained by doing them sequentially in either order.  While I’ve got nothing against local functions, I would rather do local functions in the context of a more general cleanup about nesting constraints (e.g., restrictions on static fields of inner classes, private classes nested in interfaces, local interfaces and enums, etc.)  There’s a whole pile of “it makes sense to nest X in Y, but you can’t” irregularities that can be cleaned up at once — but I think there’s more immediate payback in doing the more constrained feature of concise method bodies first.  


> Begin forwarded message:
> 
> From: Lukas Eder <lukas.eder at gmail.com>
> Subject: JEP draft: Concise Method Bodies - extend this to local functions?
> Date: September 19, 2018 at 4:44:04 PM EDT
> To: amber-spec-comments at openjdk.java.net
> 
> Hello,
> 
> I've just seen this new JEP draft, which really looks very useful:
> http://openjdk.java.net/jeps/8209434
> 
> Now, given that this would be possible:
> 
>    int x(String s) -> s.length();
> 
> And given that this almost looks like a named lambda expression, could this
> maybe be an occasion to re-discuss the possibility of supporting named
> lambda expression / local functions?
> 
> E.g.
> 
>    void m() {
> 
>        // lambda local to m()
>        ToIntFunction<String> x1 = (String s) -> s.length();
> 
>        // "method" local to m()
>        int x2(String s) -> s.length();
> 
>        // We can now do:
>        int i1 = x1.apply("abc");
> 
>        // More concise
>        int i2 = x2("abc");
>    }
> 
> I know this was discussed for Java 8 and rejected, but given the high
> similarity of the currently proposed concise method body syntax and the
> lambda syntax, I feel that on a high level, this might appear coherent and
> useful.
> 
> Of course, in such a case, it would appear useful to allow the original
> method body syntax as well in a local method:
> 
>    void m() {
>        int x3(String s) {
>            return s.length();
>        }
>    }
> 
> Also, many other languages have this feature, e.g. Scala, Ceylon, Kotlin
> 
> Thanks,
> Lukas

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20180919/e27b8d6f/attachment.html>


More information about the amber-spec-experts mailing list