首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MethodHandle InvokeExact参数

MethodHandle InvokeExact参数
EN

Stack Overflow用户
提问于 2015-01-20 15:38:24
回答 1查看 443关注 0票数 1

我对方法句柄的方法参数感到困惑。我首先构建一个带测试方法句柄的卫士,如下所示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
      String.startsWith(String)
      "result"          "data"  

但是,这三个参数作为以下方式传递给falseTarget:

代码语言:javascript
复制
      falseTarget(String str, String own, String t)
                        "result"      "data"     "sijie"

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-20 15:48:46

这出现在findVirtual的Javadoc中。

当调用时,句柄将把第一个参数作为接收方,并对接收方的类型进行分派,以确定要输入哪个方法实现。

就像你描述的那样。static方法没有接收器,因此invokeExact的所有参数都被认为是该方法的参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28049332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档