我正在尝试更改已加载类的方法的返回值。
从 ByteBuddy 的文档(http://bytebuddy.net/#/tutorial)来看,这似乎可以使用 Java 代理,只要我不添加任何字段/方法。
我的代码如下:
ByteBuddyAgent.install();
new ByteBuddy()
.redefine(StuffImpl.class)
.method(returns(Result.class))
.intercept(FixedValue.value(new Result("intercepted")))
.make()
.load(StuffImpl.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent());
但我得到以下异常:
java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)
问题是,我没有添加任何方法。Byte Buddy 在上面的代码中在哪里添加了字段或方法?
编辑:
public class StuffImpl {
public Result validate() {
return new Result("original");
}
}
public class Result {
private String result;
public Result(String result) {
this.result = result;
}
}