私の問題は次のとおりです。invoke dynamic を使用しようとしていますが、findVirtual と invoke に問題があります。
Class<?> returnTypeClass = Class.forName("com.etc1.foo.FIXML");
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType methodType = MethodType.methodType(returnTypeClass ,returnTypeClass); //The method which will be invoked has as a param FIXML object and return a FIXML object
MethodHandle methodHandle = lookup.findVirtual(
com.etc2.foo.GMD,
"name_method",
methodType);
findVirtual で最初の問題があります。次の MethodType (GMD,FIXML)FIXML で methodHandle を取得しています --> これは正しくありません。なぜなら、私のメソッドは"public FIXML name_method(FIXML)"であり、findVirtual は methodHandle を作成しているからです" public FIXML name_method(GMD,FIXML)"、findVirtual が "com.etc2.foo.GMD" をパラメーターとして使用していることを理解しています。ここからの最初の質問: findVirtual が methodHandle FIXML name_method(FIXML) を返すようにするにはどうすればよいですか??
2番目の問題は最初の問題から来ていると思います... methodHandleでメソッドを呼び出すと
com.etc1.foo.FIXML fixml;
com.etc1.foo.FIXML fixml2;
fixml2 = (FIXML) methodHandle.invoke(fixml);
「java.lang.invoke.WrongMethodTypeException: MethodHandle(GMD,FIXML)FIXML を (Object)Object に変換できません」というエラーが表示されます。
実際...私は他の質問を調べていて、別の解決策を試しましたが、何もうまくいきませんでした.