Loss of conciseness due to overload ambiguity
Venkat Subramaniam
venkats at agiledeveloper.com
Wed Jan 9 08:47:36 PST 2013
Hi Maurizio,
That would be great. I ran into the same issue when I used lambdas instead of method references also, so both may need an
uplift in this area.
Thanks,
Venkat
On Jan 9, 2013, at 9:45 AM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
> We are considering ways to mitigate this; if the method reference is unambiguous (only one match) there are facts that can be used to achieve more overload resolution precision (pretty much what we do with implicit lambdas - where we use arity to prune unwanted candidates).
>
> Maurizio
>
> On 09/01/13 17:07, Venkat Subramaniam wrote:
>> Greetings,
>>
>> Is there a way to gain the desired conciseness in the following case?
>>
>> List<Person> people = Arrays.asList(
>> new Person("Kate", 10),
>> new Person("Jack", 10)
>> );
>> Function<Person, String> byName = person -> person.getName();
>>
>> people.stream().sorted(comparing(byName)).into(new ArrayList<>());
>> //[Jack - 10, Kate - 10]
>> people.stream().sorted(comparing(Person::getName)).into(new ArrayList<>());
>> /*
>> error: reference to comparing is ambiguous
>> people.stream().sorted(comparing(Person::getName)).into(new ArrayList<>());
>> ^
>> both method <T#1>comparing(IntFunction<? super T#1>) in Comparators and method <T#2,U>comparing(Function<? super T#2,? extends U>) in Comparators match
>> where T#1,T#2,U are type-variables:
>> T#1 extends Object declared in method <T#1>comparing(IntFunction<? super T#1>)
>> T#2 extends Object declared in method <T#2,U>comparing(Function<? super T#2,? extends U>)
>> U extends Comparable<? super U> declared in method <T#2,U>comparing(Function<? super T#2,? extends U>)
>> 1 error
>> */
>>
>> Thanks,
>>
>> Venkat
>>
>
More information about the lambda-dev
mailing list