我正在使用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”访问,而不是“直接”访问,但实际上我也无法弄清楚如何做到这一点!
感谢。
答案 0 :(得分:0)
目前还没有一种好方法,但我正致力于扩展组件以供此类使用。目前(版本1.6.11),执行所需操作的唯一方法是使用您在评论中建议的自定义StackManipulation
。