我正在尝试制作棘手的东西。我有方法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()
异常),我也不知道为什么。
我不确定我有两个猜测:
- 我以错误的方式使用代理。但是我检查了一下,似乎很好。 方法
- 对象代理是一个代理,因此它可能会无限循环地调用自身。除了
invoke()
之外,我没有找到如何将此代理解包到真实对象的方法,但是它不适合此代理。
StackOverflow
中的您有什么疑问吗?