method references: type inference, toString()

Paul Holser pholser at gmail.com
Wed Feb 22 06:50:11 PST 2012


Thanks for the prompt response, and for the reminder about the cast.
Eager to see how things shake out with type inference!

--p

On Tue, Feb 21, 2012 at 5:07 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>> 1) Should the usage of Foo::isBar as the predicate fed to
>> PredicateMatcher.matches() compile successfully? I'm hoping not to
>> have to perform the SAM conversion by hand:
>>
>>     Predicate<Foo>  bar = Foo::isBar;
>>     assertThat(new BarredUpFoo(), PredicateMatcher.matches(bar);
>
>
> Without answering the question on whether the inference should succeed or
> not (the exact details of type inference are currently in flux), I'll point
> out that there is a less intrusive form of "by hand" that can be used to
> provide the needed additional type info to the compiler -- use a cast to
> provide the target type.  This is less intrusive that having to name a local
> variable.
>
>  assertThat(new BarredUpFoo(),
>             PredicateMatcher.matches((Predicate<Foo>) Foo::isBar));
>
>
>> 2) Wondering if it wouldn't be too much trouble to have method
>> references respond to toString() with something like "Foo::isBar" or
>> "method isBar on class Foo", instead of, e.g. "Main$1 at a30a4e". It'd
>> make the output of PredicateMatcher.matches() really slick.
>
>
> Yes, the details of this are being actively discussed in the EG, and is a
> desirable goal.  Lots of details to work out, of course.


More information about the lambda-dev mailing list