1

我有一些演示代码如下。

  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);'

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

4

1 回答 1

0

I think the problem is with int.class. Try Integeer.class or Integer.TYPE instead.

于 2012-10-18T22:39:06.960 回答