无限循环和带有代理的StackOverflow

我正在尝试制作棘手的东西。我有方法O bjectFactory.getObject(),该方法返回需要实现Object的{​​{1}}。我正在尝试制作Serializable的现有实例的代理,拦截其方法ObjectFactory,然后将返回的对象包装到实现getObject()的代理中。

Serializable

当代码进入@Override public Object get(String name,ObjectFactory<?> objectFactory) { ... ObjectFactory<?> serializableObjectFactory = (ObjectFactory<?>)Proxy.newProxyInstance(CurrentClass.class.getclassLoader(),new Class[]{ObjectFactory.class},new invocationHandler() { @Override public Object invoke(Object proxy,Method method,Object[] args) throws Throwable { //Here I'm getting StackOverflow exception. I guess,it just invokes itself recursively. Don't know why Object result = ((ObjectFactory<?>) proxy).getObject(); //Here I make object implement Serializable return Mixin.create(new Class[]{Serializable.class,result.getclass()},new Object[] {result}); } }); ... return super.get(name,serializableObjectFactory); } 时,似乎只是递归地调用了自己(我得到了Object result = ((ObjectFactory<?>) proxy).getObject()异常),我也不知道为什么。

我不确定我有两个猜测:

  1. 我以错误的方式使用代理。但是我检查了一下,似乎很好。
  2. 方法StackOverflow中的
  3. 对象代理是一个代理,因此它可能会无限循环地调用自身。除了invoke()之外,我没有找到如何将此代理解包到真实对象的方法,但是它不适合此代理。

您有什么疑问吗?

jun8888888 回答:无限循环和带有代理的StackOverflow

让我们看看这一行:

Object result = ((ObjectFactory<?>) proxy).getObject();

您认为会发生什么?

  1. 它调用代理。
  2. 代理将调用您的InvocationHandler。
  3. 返回步骤1。

也许可以改为调用objectFactory上的方法?

本文链接:https://www.f2er.com/2494096.html

大家都在问