Код: Выделить всё
public class A {
public static String foo;
public String originalMethod() {
return foo; // 'return dynamicGenerateMethod()' after replaced
}
public String dynamicGenerateMethod() {
return "bar";
}
}
Код: Выделить всё
DynamicType.Unloaded make = new ByteBuddy()
.redefine(A.class)
.defineMethod("dynamicGenerateMethod", String.class, Opcodes.ACC_PUBLIC)
.intercept(FieldAccessor.ofField("foo"))
.visit(MemberSubstitution.relaxed()
.field(named("foo"))
.onRead()
.replaceWithMethod(named("dynamicGenerateMethod"))
.on(not(named("dynamicGenerateMethod"))))
.make();
Код: Выделить всё
java.lang.IllegalStateException: Cannot substitute parameterless instruction with public static java.lang.String com.test.A.foo
at net.bytebuddy.asm.MemberSubstitution$Substitution$ForMethodInvocation$MethodResolver$Matching.resolve(MemberSubstitution.java:1359)
поэтому я хочу знать, нельзя ли заменить статические переменные? Или у меня проблемы с использованием?
Большое спасибо за любые предложения!
Подробнее здесь: https://stackoverflow.com/questions/788 ... new-method