<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>"Brian Goetz" <brian.goetz@oracle.com><br><b>À: </b>"daniel smith" <daniel.smith@oracle.com>, "amber-spec-experts" <amber-spec-experts@openjdk.java.net><br><b>Envoyé: </b>Vendredi 12 Octobre 2018 19:15:53<br><b>Objet: </b>`this` in 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 class="moz-cite-prefix">On 10/5/2018 7:22 PM, Dan Smith wrote:<br>
    </div>
    <blockquote cite="mid:7F5E0D67-0A18-47E0-9767-D474BA4E52D7@oracle.com">
      <div class="">- It's not totally clear what we do with 'this'.
        Kind of seems like it should be treated as the first parameter
        to be passed, but there are also examples in the JEP that ignore
        it. And is it allowed to be referenced by the receiver
        expression?</div>
      <div class=""><br class="">
      </div>
      <div class="">void
        reverse() = Collections::reverse; // invoke
        Collections.reverse(this)?</div>
      <div class="">int
        length(String s) = String::length; // invoke s.length()?</div>
      <div class="">void
        altMethod() = ThisClass::method; // invoke this.method()?</div>
      <div class="">void
        altMethod2() = this::method; // legal?</div>
    </blockquote>
    <br>
    <tt>Drilling in on `this`: <br><br>
      One of the strongest motivating examples was:<br><br>
          static final Comparator c = ...<br><br>
          int compareTo(T other) = c::compare;<br><br>
      And in this case, we want this to wire to c.compare(this, other). 
      <br><br>
      However, another strong motivating case is: <br><br>
          final List myList = ...<br><br>
          int size() = myList::size;<br><br>
      in which case we want this to wire to myList.size() and ignore
      `this` entirely.  <br><br>
      And, both use cases are equally desirable.  </tt></blockquote><div><br data-mce-bogus="1"></div><div>???<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>1) They are few methods that can be converted to concise methods because the implementation has to be a one liner,<br data-mce-bogus="1"></div><div>2) They are very few methods that can be converted to a concise methods that that use the :: syntax because it only works if the implementation delegates to a method that uses all the parameters in the same order,<br data-mce-bogus="1"></div><div>3) They are very very few methods that can be converted to a concise methods that use the :: and use 'this' explicitly as first parameter.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>so before descending into the rabbit hole, i think not me|someone should check how many methods can be converted to use the :: + this syntax in big corpus of Java codes. <br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>Rémi</div><div><br data-mce-bogus="1"></div></div></div></body></html>