invokedynamic一个具有已知签名的方法,但是动态类型

时间:2016-05-17 11:33:05

标签: java bytecode

所以我最近一直在使用字节码,我想学习如何使用invokedynamic。我已经想出如何通过invokedynamic链接静态方法,但我有一个更具体的用例。我想:

  • 将任意对象传递给方法(该对象具有我想要调用的预定方法签名,但该类型不能继承接口或容易确定。)
  • 然后该方法应该对该对象进行invokedynamic,并调用给定的方法

目前我的bootstrap方法如下所示:

public static CallSite bootstrap(MethodHandles.Lookup caller, String name, MethodType methodType) throws Throwable {
    return new ConstantCallSite(MethodHandles.lookup().findVirtual(null, name, methodType));
}

null是我不确定的地方。我基本上试图在对象上调用虚拟,但绕过检查以查看该方法是否实际存在(因为对象的静态绑定类型将是Object)。 (因为如果我传入一个类,并且一个方法不在该类中,invokevirtual-ing将抛出错误。)

任何帮助表示赞赏!

编辑:基本上我正在尝试实现排序的鸭子打字。

0 个答案:

没有答案