我对方法句柄的方法参数感到困惑。我首先构建一个带测试方法句柄的卫士,如下所示:
public class App
{
public static void trueTarget(String str, String own, String t){
System.out.println("This is true target "+str+" "+own + " "+t);
}
public static void falseTarget(String str, String own, String t){
System.out.println("This is false target " + str+" "+own +" "+t);
}
public static void main( String[] args ) throws Throwable
{
MethodHandle test = MethodHandles.publicLookup().findVirtual(String.class, "startsWith",
MethodType.methodType(boolean.class, String.class));
System.out.println((boolean)test.invokeExact("result", "res"));
MethodHandle target = MethodHandles.lookup().findStatic(App.class, "trueTarget", MethodType.methodType(void.class, String.class, String.class, String.class));
MethodHandle fallback = MethodHandles.lookup().findStatic(App.class, "falseTarget", MethodType.methodType(void.class, String.class, String.class, String.class));
MethodHandle gwd = MethodHandles.guardWithTest(test, target, fallback);
gwd.invokeExact("result", "data", "sijie");
}
}对我来说,问题是如何将参数传递给三个方法句柄: test、trueTarget和faliover。1,invokeExact“结果”的第一个参数作为接收方传递给测试保护程序,第二个参数"data“传递给startWith:
String.startsWith(String)
"result" "data" 但是,这三个参数作为以下方式传递给falseTarget:
falseTarget(String str, String own, String t)
"result" "data" "sijie"那么,参数传递的规则是什么,它们如何与方法句柄引用的方法相匹配?
发布于 2015-01-20 15:48:46
这出现在findVirtual的Javadoc中。
当调用时,句柄将把第一个参数作为接收方,并对接收方的类型进行分派,以确定要输入哪个方法实现。
就像你描述的那样。static方法没有接收器,因此invokeExact的所有参数都被认为是该方法的参数。
https://stackoverflow.com/questions/28049332
复制相似问题