Try MethodType type = MethodType.methodType(Constructor.class, Class[].class); MethodHandle mh = MethodHandles.lookup().findVirtual(Class.class, "getDeclaredConstructor", type); MethodType target = MethodType.methodType(void.class, Object.class, Object[].class); mh = MethodHandles.explicitCastArguments(mh, target); mh.invokeExact((Object)Class.class, (Object[])new Class[0]);
Cheers, -- Jim On 2012-02-07, at 12:37 PM, Jochen Theodorou wrote: > Am 07.02.2012 17:29, schrieb Jim Laskey: >>>>> MethodType type = MethodType.methodType(Constructor.class, >>>>> Class[].class); >>>>> MethodHandle mh = MethodHandles.lookup().findVirtual(Class.class, >>>>> "getDeclaredConstructor", type); >>>>> MethodType target = MethodType.methodType(Object.class, >>>>> Object.class, Object.class); >>>>> mh = mh.asType(target); >>>>> mh.invokeWithArguments(Class.class,new Class[0]); >> >> As soon as you mh = mh.asType(target); it is no longer vararg, so it >> is treating new Class[0] as the second argument cast to Object. If >> you are trying to type as (Object , Object[]). I think you are going >> to run into difficulties validating (Class[]) Object[]. You may have >> to add a wrapper to get what you want, but you could also try using >> asCollector. > > or in other words: I should not use invokeWithArguments for this. > > If I wanted to use the same target type... since that is what my call site > gives me... and I wanted to use invokeExact instead, how would I have to > change the program? > > bye blackdrag > > -- > Jochen "blackdrag" Theodorou - Groovy Project Tech Lead > blog: http://blackdragsview.blogspot.com/ > german groovy discussion newsgroup: de.comp.lang.misc > For Groovy programming sources visit http://groovy-lang.org > _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev