gpt4 book ai didi

java - MethodHandle InvokeExact 参数

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:18 25 4
gpt4 key购买 nike

我对方法句柄的方法参数感到困惑。我首先构建了一个guardwithtest方法句柄,如下所示:

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的第一个参数“result”作为接收者传递给测试守卫,第二个参数“data”传递给startWith:

      String.startsWith(String)
"result" "data"

但这三个参数传递给 falseTarget 的方式如下:

      falseTarget(String str, String own, String t)
"result" "data" "sijie"

那么,参数传递的规则是什么?它们如何与方法句柄引用的方法相匹配?

最佳答案

这出现在 findVirtual 的 Javadoc 中

When called, the handle will treat the first argument as a receiver and dispatch on the receiver's type to determine which method implementation to enter.

和你描述的一模一样。 static 方法没有接收器,因此 invokeExact 的所有参数都被视为该方法的参数。

关于java - MethodHandle InvokeExact 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com