> De: "Brian Goetz" <brian.go...@oracle.com> > À: "daniel smith" <daniel.sm...@oracle.com>, "amber-spec-experts" > <amber-spec-experts@openjdk.java.net> > Envoyé: Vendredi 12 Octobre 2018 19:15:53 > Objet: `this` in concise method bodies
> On 10/5/2018 7:22 PM, Dan Smith wrote: >> - 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? >> void reverse() = Collections::reverse; // invoke Collections.reverse(this)? >> int length(String s) = String::length; // invoke s.length()? >> void altMethod() = ThisClass::method; // invoke this.method()? >> void altMethod2() = this::method; // legal? > Drilling in on `this`: > One of the strongest motivating examples was: > static final Comparator c = ... > int compareTo(T other) = c::compare; > And in this case, we want this to wire to c.compare(this, other). > However, another strong motivating case is: > final List myList = ... > int size() = myList::size; > in which case we want this to wire to myList.size() and ignore `this` > entirely. > And, both use cases are equally desirable. ??? 1) They are few methods that can be converted to concise methods because the implementation has to be a one liner, 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, 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. 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. Rémi