我的用例是实现一种将某些字段与字符串串联在一起的方法。基本上等同于:
String doAThing(){
return this.a + " " + this.b;
}
在示例中,我只能找到静态值(例如https://github.com/raphw/byte-buddy/blob/master/byte-buddy-dep/src/test/java/net/bytebuddy/ByteBuddyTutorialExamplesTest.java处的堆栈操作)
谢谢!
答案 0 :(得分:0)
如果要加入的字段是已知的,不需要动态发现,则可以尝试使用 @FieldValue :
public class Test {
public static void main(String[] args) throws Exception {
String name = Inner.class.getName() + "_bb";
new ByteBuddy()
.redefine(Inner.class)
.name(name)
.defineMethod("doAThing", String.class, Opcodes.ACC_PUBLIC)
.intercept(to(new Interceptor()))
.make()
.load(Test.class.getClassLoader());
Object instance = Class.forName(name).newInstance();
Method m = instance.getClass().getMethod("doAThing");
System.out.println(m.invoke(instance));
}
public static class Interceptor {
public String doAThing(@FieldValue("a") @RuntimeType Object a, @FieldValue("b") @RuntimeType Object b) {
return a + "_" + b;
}
}
public static class Inner {
private String a = "a";
private String b = "b";
}
}