如何为具有可变参数的方法构造 MethodType
How to construct a MethodType for a method with variant parameters
我未能为 Java 中的方法查找创建 MethodType。下面是我的代码。在这段代码中,我想为 sample::gwd 方法创建一个 MethodType,然后通过 lookup().findStatic 检索对该函数的引用。很明显,我无法获得方法引用,因为 MethodType 构造错误。
//I want to construct MethodType for Sample:gwd method, but do not know how to handle array parameters for 'gwd' method
MethodType mt = MethodType.methodType(Object.class, MethodHandle.class, MethodHandle.class, MethodHandle.class);
MethodHandle myMH = MethodHandles.lookup().findStatic(Sample.Class, "gwd", mt);
public class Sample
{
public static Object gwd(MethodHandle methodhandle, MethodHandle methodhandle1, MethodHandle methodhandle2, Object aobj[])
throws Throwable
{ .......... }
}
谁能帮帮我?谢谢
您非常接近,您传递给 MethodHandles#lookup
的 MethodType
缺少最后一个参数,即 Objects
的数组。这就是你需要的:
MethodType mt = MethodType.methodType(Object.class, MethodHandle.class, MethodHandle.class, MethodHandle.class, Object[].class);
顺便说一下,如果 gwd
使用可变参数而不是最终数组,这也是您需要的。
我未能为 Java 中的方法查找创建 MethodType。下面是我的代码。在这段代码中,我想为 sample::gwd 方法创建一个 MethodType,然后通过 lookup().findStatic 检索对该函数的引用。很明显,我无法获得方法引用,因为 MethodType 构造错误。
//I want to construct MethodType for Sample:gwd method, but do not know how to handle array parameters for 'gwd' method
MethodType mt = MethodType.methodType(Object.class, MethodHandle.class, MethodHandle.class, MethodHandle.class);
MethodHandle myMH = MethodHandles.lookup().findStatic(Sample.Class, "gwd", mt);
public class Sample
{
public static Object gwd(MethodHandle methodhandle, MethodHandle methodhandle1, MethodHandle methodhandle2, Object aobj[])
throws Throwable
{ .......... }
}
谁能帮帮我?谢谢
您非常接近,您传递给 MethodHandles#lookup
的 MethodType
缺少最后一个参数,即 Objects
的数组。这就是你需要的:
MethodType mt = MethodType.methodType(Object.class, MethodHandle.class, MethodHandle.class, MethodHandle.class, Object[].class);
顺便说一下,如果 gwd
使用可变参数而不是最终数组,这也是您需要的。