Typed Method handles
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Thu Jun 9 07:11:06 PDT 2011
Hi Remi,
On Thu, Jun 9, 2011 at 4:49 PM, Rémi Forax <forax at univ-mlv.fr> wrote:
> On 06/09/2011 12:33 PM, Ali Ebrahimi wrote:
>
> Hi Remi,
> comments inlined.
>
> On Thu, Jun 9, 2011 at 1:49 PM, Rémi Forax <forax at univ-mlv.fr> wrote:
>
>> On 06/09/2011 11:55 AM, Ali Ebrahimi wrote:
>> > Hi all,
>> > What happens if method handles takes variable arty of generic type
>> > parameters.
>> >
>> > MethodHandle<void,int> mh = #{x -> System.out.println(x);};
>> >
>> > mh.invokeExack(1); //compiles
>> >
>> > mh.invokeExack("1"); //compile fail
>>
>> I've proposed this syntax last year or before.
>> There are 2 problems:
>> - it's a function type, so this means to introduce a new kind of type
>> in the Java type system.
>> - it allows to use void and the primitives types between the angle
>> bracket
>> which is not something allowed for the generics syntax.
>>
>
> This is not so hard. Method handles are new phenoms to platform and
> compiler can handle them specially as polymorphic signature method
> invocations handed.
>
> Best Regards,
> Ali Ebrahimi
>
> So this syntax was rejected for Java 8 but may be reconsidered later.
>>
>> Rémi
>>
>
> I think I know what a method handle is.
> Polymorphic signature method like MH.invoke or MH.invokeGeneric are handled
> by bypassing the method resolution used by the compiler.
> That's why you have to specify the return type when calling such methods.
> To summarize, the compiler does nothing and let the VM checks at runtime if
> the invocation is safe or not.
>
> So you can't reuse this mechanism to implement function type.
>
I don't mean reuse the same mechanism, my intent is specially applying of
generic type parameters for MethodHandle reference types and allowing them
take arbitrary number of type parameters in declaration.
In this case, the compiler does not check number and types of them and
accept them as is and use them for checking of methodhandle invocation
expresions .
MethodHandle<void,int> mh1;
MethodHandle<void,int,int> mh2;
MethodHandle mh;
...
mh1.invoke(1);
mh2.invoke(1,2);
for generic MethodHandle reference as mh1, mh2 compiler checks applicability
of passed args in methodhandle invocation expresions and for non-generic
once as mh don't do this check and works as current mechanism.
mh.invoke(1,2,3,4);
MethodHandle class itself does not any generic type parameters in
definition.
Best Regards
Ali Ebrahimi
> Rémi
>
>
More information about the lambda-dev
mailing list