apply

Remi Forax forax at univ-mlv.fr
Sun Dec 16 14:30:46 PST 2012


On 12/16/2012 11:10 PM, Doug Lea wrote:
>
> (Still in the midst of the painful setup allowing
> JDK8 j.u.c builds to track lambda-libs...)
>
> Could someone please explain clearly and compellingly why we are using
> different method names for all the functional forms in java.util.function
> instead of just "apply"?

Problems come when a functional interface inherits from another, because 
in that case the two methods are considered as overloads and Java has 
specific rules for overloads like a method with the same parameters 
can't have different return type.
by example, if Supplier use apply, IntSupplier can not inherits from 
Supplier.

interface Supplier<T> { T apply(); }
interface IntSupplier extends Supplier { int apply(); }   // won't compile

and we want InSupplier to inherit from Supplier to avoid function 
interface to functional interface conversion that currently always 
creates a new object.

> Does anyone think that other users won't find this very annoying?

It's annoying for framework writers not users of those frameworks 
because writing a lambda doesn't require to know the method name.

>
> -Doug

Rémi



More information about the lambda-libs-spec-observers mailing list