使用ByteBuddy访问有关检测方法的参数的字段

时间:2016-12-01 21:59:13

标签: java byte-buddy

我正在尝试在运行时生成有效的属性访问器。具体来说,这意味着我正在使用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对执行此操作非常简单(setterjava.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}}只允许访问字段生成的类(或其中一个父母)。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

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