С учетом следующего прокси-сервера Dynami c java с обработчиком вызова, внутреннее состояние которого изменяется во время вызова:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
Test test = (Test) Proxy.newProxyInstance(
Test.class.getClassLoader(),
new Class[] { Test.class },
new MyInvocationHandler(true));
test.doWork();
test.doWork();
}
public interface Test {
void doWork();
}
public static class MyInvocationHandler implements InvocationHandler {
private boolean flag;
public MyInvocationHandler(boolean flag) {
this.flag = flag;
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
if ("doWork".equals(method.getName())) {
System.out.println("Flag is " + flag);
}
if (flag) {
flag = false;
// Do somemthing
}
return null;
}
}
}
Я ожидаю, что в stdout будет записано следующее:
Флаг равен true
Флаг равен false
Однако при пошаговой отладке выдается:
Флаг равен false
Флаг ложен
Я использую Java 11.0.5 и IntelliJ IDEA для отладки.
Кто-то знает, что здесь произошло?