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.

Cheers,

-- Jim


On 2012-02-07, at 12:14 PM, Jochen Theodorou wrote:

> The problem can be easily reproduced using this:
>>        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]);
> 
> can someone tell me the mistake?
> 
> bye Jochen
> 
> Am 07.02.2012 17:04, schrieb Jochen Theodorou:
>> Hi all,
>> 
>> maybe someone can explain to me why method handles behave this way in my
>> case.
>> 
>> Bascially I have a handle for Class#getDeclaredConstructor(Class...) I
>> created via unreflect.
>> 
>> http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredConstructor%28java.lang.Class...%29
>> 
>> this handle is then created as a AdapterMethodHandle$AsVargsCollector.
>> My targetType is Object(Object,Object) and the arguments to the call are
>> the Class, and an empty Class[]. So the next steps are asType with the
>> target type, adding a guard with catch, then my guards for the arguments
>> and last I do an invokeWithArguments.
>> 
>> What I get now is a ClassCastException with the message required class
>> java.lang.Class but encountered class [Ljava.lang.Class;
>> 
>> The guards are unrelated to the problem, since it happens without them
>> as well.
>> 
>> Now can anyone explain me why I get that exception? It doesn't really
>> make sense to me atm.
>> 
>> bye Jochen
>> 
> 
> 
> -- 
> 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

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to