MethodHandles#exactInvoker的JavaDoc是否存在表述错误?
关于MethodHandles.exactInvoker JavaDoc的疑问解答
你说得对,JavaDoc里的X.invoke(T, A...)确实是表述错误,正确写法应该是X.invoke(M, A...)。
原因很明确:
exactInvoker(T)返回的调用器方法句柄X,核心作用是执行传入的目标方法句柄,它的第一个参数必须是具体的MethodHandle实例(也就是你提到的M),而非方法类型T。- 方法类型
T的作用只是用来确定调用器X的签名规则——X会严格匹配T定义的参数列表和返回值类型,第一个参数固定为MethodHandle,后续参数就是T里的A...。
举个实际代码示例:
// 假设M是一个类型为(String, int)->void的MethodHandle MethodType methodType = M.type(); MethodHandle invoker = MethodHandles.exactInvoker(methodType); // 正确调用方式:传入目标MethodHandle M和对应参数 invoker.invoke(M, "demo", 456); // 这完全等价于直接调用M.invokeExact("demo", 456);
内容的提问来源于stack exchange,提问作者Laird Nelson
相关产品推荐
相关产品推荐

