gpt4 book ai didi

java - 使用 ByteBuddy 访问检测方法的参数字段

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:54 26 4
gpt4 key购买 nike

我正在尝试在运行时生成高效的属性访问器。具体来说,这意味着我正在生成使用 ByteBuddy 实现以下接口(interface)的类:

interface PropertyAccess<T> {
void set(Object instance, T value);
T get(Object instance);
}

实现应该如下所示:

class SomeProperty implements PropertyAccess<String> {
public void set(Object o, String s) {
((SomeClass) o).setFoo(s);
}
public String get(Object o) {
return ((SomeClass) o).getFoo();
}
}

对 getter/setter 对执行此操作很简单(gettersetter 是实际 getter 和 setter 的 java.lang.reflect.Method 对象):

new ByteBuddy()
.subclass(Object.class)
.implement(PropertyAccess<String>.class) // pseudo syntax, I am using Guava's TypeToken here in reality
.method(named("get")).intercept(invoke(getter).onArgument(0))
.method(named("set")).intercept(invoke(setter).onArgument(0).withArgument(1))

(我在这里省略了允许从 ObjectSomeClass 的转换的分配器类型)。

但现在我还想允许为直接访问的字段生成这样的类,并且如果不编写自定义 Implementation 类,我找不到方法来实现此目的,因为 FieldAccessor 只允许访问生成的类(或其父类之一)的字段。

我错过了什么吗?

最佳答案

你是对的,目前没有办法访问字段而不是方法。不过,我认为通过将字段访问处理为类似于 getter 或 setter 的方式,这应该很容易解决。我正在 ticket #225 中跟踪此限制.

关于java - 使用 ByteBuddy 访问检测方法的参数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com