byte-buddy - 我可以创建一个带有私有静态最终 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 配方应该在这里。
解决方案
使用 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")))
推荐阅读
- laravel - 无法在 XAMPP 中读取和写入 htdocs 文件夹
- python - 散景 - 模型必须由单个文档拥有 [错误]
- tensorflow - TensorFlow梯度是否计算对决策变量具有未知依赖性的函数的导数
- php - preg_replace_callback 给出多个错误
- java - javamail 应用程序中的 NoSuchProviderException
- python - 如何将我的 msys2 终端设置为不缓冲输出?
- javascript - 在 IOS 11.3 (FIX) 上,关于具有方法值的对象属性的敲除可观察失败
- c - 将局部变量的位置更改为堆栈中的最低地址
- ios - 即使在 iPhone 设备上安装了根证书后,Charles 代理也无法工作
- r - 检索 fread 使用的列分隔符