无法在动态加载类对象上使用MethodHandle的invokeExact

时间:2012-10-17 15:51:05

标签: java-7 methodhandle

我有一些演示代码,如下所示。

  Class<?> myClass = cl.loadClass("com.hp.ac.scriptengine.test." + generateClassName);
  Object my_obj = myClass.newInstance();
  MethodType mt; 
  MethodHandle mh;
  MethodHandles.Lookup lookup = MethodHandles.lookup();            
  mt = MethodType.methodType(void.class, int.class);
  mh = lookup.findVirtual(my_obj.getClass(), "ToDoit", mt);
  mh.invokeExact(my_obj,1);

这里'“com.hp.ac.scriptengine.test。” + generateClassName'是生成的类。 我得到的信息如下。

java.lang.invoke.WrongMethodTypeException: (I)V cannot be called as (Ljava/lang/Object;I)V
                 at com.hp.ac.scriptengine.test.compliebyCommandline.main(compliebyCommandline.java:138)

此处第138行是mh.invokeExact(my_obj,1);'

我在Java 7 API文档中尝试了该演示代码(例如...... mh.invokeExact("daddy",'d','n')...)。它工作正常。此类调用(mh.invokeExact("daddy",'d','n'))只调用(CC)Ljava/lang/String以外的(Ljava/lang/String;CC)Ljava/lang/String。 但是为什么在我的代码中mh.invokeExact(my_obj,1)调用(Ljava / lang / Object; I)V而不是(I)V?

1 个答案:

答案 0 :(得分:0)

我认为问题出在int.class上。请尝试使用Integer.class或Integer.TYPE。