我的问题如下:我正在尝试使用动态调用,但我在使用 findVirtual 和调用时遇到问题。
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)?
第二个问题来自第一个问题,我认为......当我通过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”
实际上......我一直在研究其他问题,我尝试了不同的解决方案,但没有任何效果。