我有一个问题,我有多个具有相同签名的方法(全部返回 void)。我希望能够将这些方法的 methodHandle 组合起来,以获得一个依次调用每个方法的 methodHandle。
我想出的唯一方法是使用guardWithTest,我有一个如何使它工作的例子:https ://gist.github.com/gregw/b6c926fb44fd9a45b2c5afccaf7dcbf4
但代码的本质是:```java
TestMethodHandle test = new TestMethodHandle();
MethodHandle callA = MethodHandles.lookup().findVirtual(TestMethodHandle.class,"callA", methodType(Void.TYPE, String.class, Integer.TYPE)).bindTo(test);
MethodHandle callB = MethodHandles.lookup().findVirtual(TestMethodHandle.class,"callB", methodType(Void.TYPE, String.class, Integer.TYPE)).bindTo(test);
MethodHandle callC = MethodHandles.lookup().findVirtual(TestMethodHandle.class,"callC", methodType(Void.TYPE, String.class, Integer.TYPE)).bindTo(test);
MethodHandle asGuard = MethodHandles.lookup().findStatic(TestMethodHandle.class,"alwaysTrue", MethodType.methodType(Boolean.TYPE));
MethodHandle guardA = MethodHandles.filterReturnValue(callA,asGuard);
MethodHandle guardB = MethodHandles.filterReturnValue(callB,asGuard);
MethodHandle guardC = MethodHandles.filterReturnValue(callC,asGuard);
MethodHandle empty = empty(methodType(Void.TYPE, String.class, Integer.TYPE));
MethodHandle invokeC = MethodHandles.guardWithTest(guardC,empty,empty);
MethodHandle invokeBC = MethodHandles.guardWithTest(guardB,invokeC,empty);
MethodHandle invokeABC = MethodHandles.guardWithTest(guardA,invokeBC,empty);
invokeABC.invoke("chained", 2);
```
有没有更简单的方法来做到这一点?
补充问题......我应该这样做还是在方法句柄集合上循环调用 methodHandles 是否一样快?