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'))(CC)Ljava/lang/Stringは、 以外を呼び出すだけです(Ljava/lang/String;CC)Ljava/lang/String。しかし、なぜ私のコードでmh.invokeExact(my_obj,1)(I)V 以外の (Ljava/lang/Object;I)V を呼び出すのでしょうか?

4

1 に答える 1

0

問題は int.class にあると思います。代わりに Integeer.class または Integer.TYPE を試してください。

于 2012-10-18T22:39:06.960 に答える