首页 > 解决方案 > 我可以创建一个带有私有静态最终 MethodHandle 字段的 ByteBuddy 检测类型吗?

问题描述

我过去曾问过类似的问题,但无法使其发挥作用(尚不清楚是否可能)。

现在我发现自己需要创建一个private static final类型(在我的情况下)为MethodHandle.

当然,在 Java 中,我可以简单地执行以下操作:

private static final MethodHandle mh = goGetMethodHandle();

…返回我需要goGetMethodHandle()static函数在哪里。MethodHandle

或者,等效地,我可以这样做:

private static final MethodHandle mh;
static {
  mh = goGetMethodHandle();
}

我不确定 ByteBuddy 配方应该在这里。

标签: byte-buddy

解决方案


使用 DSL 可以更轻松地完成您的解决方案:

builder
  .defineField("gorp", MethodHandle.class, 
     Visibility.PRIVATE, Ownership.STATIC, SyntheticState.SYNTHETIC, FieldManifestation.FINAL)
  .invokeable(isTypeInitializer())
  .intercept(MethodCall.invoke(Some.class.getMethod("goGetMethodHandle")
    .setsField(named("gorp")))

推荐阅读