heads-up: biggie overload rewrite

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Thu Jul 25 16:05:26 PDT 2013


Hi,
But, This one fails,
Comparator.comparing(String::length);

java: reference to comparing is ambiguous
  both method <T>comparing(java.util.function.ToLongFunction<? super T>) in
java.util.Comparator and method
<T>comparing(java.util.function.ToDoubleFunction<? super T>) in
java.util.Comparator match


On Fri, Jul 26, 2013 at 3:25 AM, Ali Ebrahimi <ali.ebrahimi1781 at gmail.com>wrote:

> Hi,
> This works for me.
>
> Comparator.comparing((String s) -> s.length());
>
>
> On Fri, Jul 26, 2013 at 2:56 AM, Maurizio Cimadamore <
> maurizio.cimadamore at oracle.com> wrote:
>
>> On 25/07/13 23:13, Richard Warburton wrote:
>> > Hi,
>> >
>> > >From a language perspective, the problem is simple: we can't type check
>> >> 's.length()' until we know that 's' is a String, and we can't figure
>> that
>> >> out until we look at the assignment target, and we can't do that until
>> >> overload resolution is done.  In other words, there is not a
>> >> context-independent way to figure out that
>> >> 'Comparator.comparing(s->s.length())' is best treated as an invocation
>> of
>> >>   'comparing(ToIntFunction)'.
>> >>
>> > Correct me if I'm wrong, but at least this means that developers should
>> be
>> > able to provide sufficient information for the compiler to correctly
>> infer
>> > the lambda expression's type by writing:
>> >
>> > Comparator.comparing((String s) -> s.length())
>> Correct - that's indeed the preferred approach. Note that this doesn't
>> work merely because of a bug, which I will fix soon.
>>
>> Maurizio
>> >
>> > rather than
>> >
>> > Comparator.comparing((ToIntFunction<String>)(s -> s.length()))
>> >
>> > I suspect that providing argument types is a lot less of a leap for a
>> > developer to make when fixing a compile error than providing a full
>> > functional interface type.
>> >
>> > regards,
>> >
>> >    Dr. Richard Warburton
>> >
>> >    http://insightfullogic.com
>> >    @RichardWarburto <http://twitter.com/richardwarburto>
>> >
>>
>>
>>
>


More information about the lambda-dev mailing list