您不能创建局部变量。如果您想多次使用一个值,您可以创建一个传递identity
,然后使用permuteArguments
(或者permuteArguments
如果可以的话,只使用它自己)复制该值,例如:
MethodHandle start = identity(String.class);
MethodHandle sideEffect = lookup().findVirtual(PrintStream.class, "println", methodType(void.class, String.class)).bindTo(System.out);
MethodHandle result = collectArguments(start, 0, sideEffect); // sideEffect needs to return nothing
result = permuteArguments(result, methodType(String.class, String.class), 0, 0); // copy argument
System.out.println((String) result.invokeExact("Hello")); // Hello\nHello
传递的参数既用作副作用句柄的参数又用作返回值。本质上,您可以多次使用该值。
但是对于方法句柄,确实没有简单的万能答案。也许我能给出的最好建议是尽量不要使用它们。即用您需要的代码编写一个静态方法,然后在更长的方法句柄链中使用一个方法句柄。