Java MethodHandle;在多个位置使用参数

时间:2016-05-30 14:10:22

标签: java methodhandle

在Java中,我能够将多个方法句柄与其每个参数组合在一起,如下所示:

foo( a, bar( 2, b ) )

..使用MethodHandles.collectArguments()

我得到的方法句柄可以这样调用:

myHandle.invokeExact( 5, 6 ); // invokes foo(5, bar(2, 6))

但是现在,我想获得一个方法句柄,将其参数调度到调用树中,如下所示:

MethodHandle myHandle = ...; // foo( *x*, bar( 2, *x* ) )
myHandle.invokeExact( 3 ); // replaces x by 3 in both locations
// this call represents 'foo(3, bar(2, 3));'

我无法理解如何做到这一点。你能救我吗?

1 个答案:

答案 0 :(得分:2)

像往常一样对Java Method Handles感兴趣,所以我会给你答案:

使用MethodHandles::permuteArguments结合MethodType :: dropPatameterTypes()调用。

就我而言,这只是一个问题:

MethodHandle handle = [...]; // method handle representing f(x1, x2) = x1 + (x2 - 2)
MethodHandle h_permute = MethodHandles.permuteArguments(
     handle,
     handle.type().dropParameterTypes(1, 2), // new handle type with 1 less param
     0, 
     0);
// h_permute now represents f(x) = x + (x - 2)