<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div><br></div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"Kevin Bourrillion" <kevinb@google.com><br><b>À: </b>"Alex Buckley" <alex.buckley@oracle.com><br><b>Cc: </b>"amber-spec-experts" <amber-spec-experts@openjdk.java.net><br><b>Envoyé: </b>Vendredi 5 Octobre 2018 22:03:53<br><b>Objet: </b>Re: New JEP: Concise Method Bodies<br></blockquote></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Sep 24, 2018 at 10:17 AM Alex Buckley <<a href="mailto:alex.buckley@oracle.com" target="_blank">alex.buckley@oracle.com</a>> wrote:<br></div><div dir="ltr"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 9/21/2018 4:07 PM, Kevin Bourrillion wrote:<br>
> "The method reference form can use most kinds of method references after<br>
> the = sign: static and unbound method references, bound method<br>
> references (if the receiver *variable* is in scope for the method<br>
> declaration)"<br>
><br>
> Can we still bind to any expression?<br>
><br>
>    private String a(String b, int c)<br>
>        throws SomeCheckedException = *d.e()*::f;<br>
<br>
No limitation is intended on the receiver, as long as the method <br>
reference expression would be legal if it appeared in the traditional <br>
body of method `a`. (Details of this translation remain to be worked out.)<br></blockquote><br><div>Can the expression before the :: refer to any method parameters? Of course, it would still expect to pass those parameters into the method, so it's <i>weird</i> to have the same parameter used in both ways, but does it make sense to forbid it?</div></div></div></blockquote><div><br></div><div>Let say you have a dynamic language where the function are itself object, you may want to write something like this:<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>public final class DynFunction {<br>  private final MethodHandle mh;<br><br>  DynFunction(MethodHandle mh) {<br>    this.mh = mh;<br>  }<br><br>  @Override<br>  public boolean equals(Object obj) {<br>    if (!(obj instanceof DynFunction)) {<br>      return false;<br>    }<br>    return mh == ((DynFunction) obj).mh;<br>  }<br><br>  @Override<br>  public int hashCode() {<br>    return mh.hashCode();<br>  }<br><br>  static <R> R call(DynFunction self, Object arg1) throws Throwable = self.mh::invoke;<br>  static <R> R call(DynFunction self, Object arg1, Object arg2) throws Throwable = self.mh::invoke;<br><br>  public static void main(String[] args) {<br>    try {<br>      var mh = lookup().findVirtual(DynFunction.class, "equals", methodType(boolean.class, Object.class));<br>      var function = new DynFunction(mh);<br>      boolean result = call(function, function);<br>      System.out.println("equals " + result);<br>    } catch(Error | RuntimeException e) {<br>      throw e;<br>    } catch(Throwable t) {<br>      throw new UndeclaredThrowableException(t);<br>    }<br>  }<br>}<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>Rémi<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><div dir="ltr"><div class="gmail_quote"><br><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div style="line-height:1.5em;padding-top:10px;margin-top:10px;color:rgb(85,85,85);font-family:sans-serif"><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(213,15,37);padding-top:2px;margin-top:2px">Kevin Bourrillion |</span><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(51,105,232);padding-top:2px;margin-top:2px"> Java Librarian |</span><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(0,153,57);padding-top:2px;margin-top:2px"> Google, Inc. |</span><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(238,178,17);padding-top:2px;margin-top:2px"><a href="mailto:kevinb@google.com" target="_blank">kevinb@google.com</a></span><br data-mce-bogus="1"></div></div></div></div></div></div></div></div><br></blockquote></div></div></body></html>