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 _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev