展开动态代理以检索下面的原始对象的最佳方法是什么?已使用创建动态代理java.lang.reflect.Proxy.newProxyInstance()
谢谢你。
展开动态代理以检索下面的原始对象的最佳方法是什么?已使用创建动态代理java.lang.reflect.Proxy.newProxyInstance()
谢谢你。
没有好的方法:Proxy.getInvocationHandler(proxy) 返回handler,但问题是从handler中提取原始对象。如果您的处理程序是匿名类,则提取原始对象的唯一方法是使用反射并从名为 val$something 的字段中提取原始对象 - 非常丑陋的方法。更好的方法是使用 getter 创建非匿名处理程序类,然后执行以下操作:
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
每个代理都有一个InvocationHandler
与之关联的。只有InvocationHandler
知道哪个对象(如果有)是代理的基础。如果您控制代理的创建,那么您可以提供自己的代理,该代理InvocationHandler
将具有您想要的额外功能(即能够公开底层对象。)如果您不这样做,那么我担心您出局了运气。
您可以使用 Proxy.getInvocationHandler(proxy) 方法来获取原始 InvocationHandler。