我正在尝试在运行时生成有效的属性访问器。具体来说,这意味着我正在使用ByteBuddy生成实现以下接口的类:
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
为getter / setter对执行此操作非常简单(setter
和java.lang.reflect.Method
是实际getter和setter的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))
个对象:
Object
(我在此处遗漏了分配者,可以将SomeClass
转换为Implementation
。
但是现在我还想允许为直接访问的字段生成这样的类,并且在没有编写自定义FieldAccessor
类的情况下我找不到这样做的方法,因为{{1}}只允许访问字段生成的类(或其中一个父母)。
我错过了什么吗?