ByteBuddy:将对象的字段传递给方法

时间:2017-03-17 13:44:32

标签: java byte-buddy

我正在使用ByteBuddy而我正在尝试实现相当于:

void foo(A a, B b) {
     b.method(a.field)
}

我能做到:

void foo(A a, B b) {
     b.method(a)
}

代码如下:

 java.lang.reflect.Method method = B.class.getMethod("method", A.class);
 MethodCall
            .invoke(method)
            .onArgument(1)
            .withArgument(0);

但我无法解决该怎么做:

void foo(A a, B b) {
     b.method(a.field)
}

使用“withField”似乎相当于“this.field”,而我想要“a.field”。有没有标准的方法来做到这一点,或者我将不得不编写自己的ArgumentLoader实现来做到这一点?在哪种情况下,可能由哪些组成?

我或许可以通过“getter”访问,而不是“直接”访问,但实际上我也无法弄清楚如何做到这一点!

感谢。

1 个答案:

答案 0 :(得分:0)

目前还没有一种好方法,但我正致力于扩展组件以供此类使用。目前(版本1.6.11),执行所需操作的唯一方法是使用您在评论中建议的自定义StackManipulation