On 01/24/2012 09:40 AM, John Rose wrote:
On Jan 23, 2012, at 11:26 PM, Charles Oliver Nutter wrote:
Oh, that does seem to work...what an ugly hack. And actually, you can
just use Object.class but cast the resulting return to void, and it
works.
So basically, I do this:
handler = MethodHandles.constant(Object.class, null)
handler = MethodHandles.asType(void.class)
The EG considered things like having MethodHandles.constant(void.class, null)
or identity(void.class).
Even identity(methodType(void.class, Throwable.class, String.class)).
There is a certain logic to such things but it didn't feel regular enough, and
users can get the same effect by asType (as you realized).
Noctarius is right in referring to Void. The MH API treats Void fairly
regularly as the wrapper type for void, with a unique (unit) wrapped value of
null.
handler = MethodHandles.dropArguments(0, Throwable.class, String.class)
And then use that as the exception handler.
It's not exactly the no-op I wanted, since it has the cast logic in
there, but it's close enough.
FWIW, I'm using this in the tests for invokebinder, for testing the
tryFinally operation:
That binder stuff is great. Next, we want a builder syntax in Java (for more than
just List+Map constants). Plus a little type-system bridge from Foo::bar and
foo->bar to MethodHandle. Then we can compose our method handles quite
swimmingly.
Lambda should provide bridge from Foo::bar to MethodHandle :)
-- John
Rémi
--
You received this message because you are subscribed to the Google Groups "JVM
Languages" group.
To post to this group, send email to jvm-languages@googlegroups.com.
To unsubscribe from this group, send email to
jvm-languages+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/jvm-languages?hl=en.