Comparator/Comparators API change proposal

Remi Forax forax at univ-mlv.fr
Tue Jun 4 15:32:05 PDT 2013


On 06/04/2013 11:36 PM, John Rose wrote:
> On Jun 3, 2013, at 2:33 PM, Henry Jen <henry.jen at oracle.com> wrote:
>
>> 2. Rename various comparing methods to comparing, comparingInt,
>> comparingLong and comparingDouble accordingly.
> This seems like a code smell.  Let me see if I understand the issue:
>
> When users sort with primitive-valued key extractors, they will have to add noise words "Int", etc., to their code to get the compiler to accept the code.
>
> These noise words exist only to get past a technical overloading difficulty, and do not capture logical details of interest to the user.
>
> Moreover, if users leave out the noise words, the code will still compile and work almost* the same (due to autoboxing).
>
> (*Because java.lang.Double comparison is a little different from double comparison.)
>
> E.g., comparing(String::length) == comparing( (Function<String,Integer>) String::length ) == comparing( (String s)->s.length() ).
>
> This extra help to the compiler is needed because it doesn't know IntFunction<T> is preferable to Function<T,Integer>, when resolving overloadings.
>
> That is because IntFunction<T> does not extend Function<T,Integer>.
>
> Is that right?

or because in the inference mechanism, Integer is not recognized as the 
boxing of an int,
or if you prefer T -> int is not a specialization of T -> Integer.

>
> — John
>

Rémi



More information about the lambda-dev mailing list