如果我有一个 JavaConstant.MethodHandle 并且我想以某种方式将它传递给 MethodCall.invoke() 有没有办法做到这一点?

If I have a JavaConstant.MethodHandle and I want to somehow pass it to MethodCall.invoke() is there a way to do it?

假设我正在使用 ByteBuddy 生成 class。

进一步假设我有一个 JavaConstant.MethodHandle 是我以某种方式制作的。

假设现在我想使用 JavaConstant.MethodHandle 作为 MethodCall.invoke() 的名义参数作为我 class 一代的一部分。 显然目前我不能这样做,因为 MethodCall.invoke 充其量只需要一个 MethodDescription。但要点是:(a) 我发现这个 MethodHandle,(b) MethodHandle 实例可以存储在常量池中,所以{疯狂挥手} (c) ByteBuddy 很神奇,我可以通过说 MethodCall.invoke(myMethodHandleConstantGoesHere).

实现生成的方法

所以:谈论对 MethodCall.invoke() 的增强是否合理(或者是否荒谬),以至于它可以采取 JavaConstant.MethodHandle 并做从常量池中解析它的魔法?

一些其他有趣的背景信息:

这是不可能的,但在您的 PR 之后,它将出现在下一个版本中。从 Byte Buddy 1.10.18 开始将成为可能。