5
A
回答
8
每個代理都有一個與之關聯的InvocationHandler
。只有InvocationHandler
知道哪個對象(,如果有)是代理的基礎。如果你控制代理的創建,那麼你可以提供你自己的InvocationHandler
,它會有你想要的額外功能(即將能夠透露潛在的對象)。如果你不這樣做,那麼我恐怕你是運氣不好。
1
您可以使用Proxy.getInvocationHandler(proxy)方法來獲取原始的InvocationHandler。
+4
這兩個建議這不是包裝的對象。 – 2012-09-11 00:24:13
8
沒有好的方法:Proxy.getInvocationHandler(proxy)返回處理程序,但問題是從處理程序中提取原始對象。如果您的處理程序是匿名類,則提取原始對象的唯一方法是使用反射並從名爲val $ something的字段中提取原始 - 非常醜陋的方法。 更好的辦法是建立非匿名處理類與getter,那麼你做的:
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
相關問題
- 1. 城堡動態代理對象原始對象轉換
- 2. 事件鏈/代理原始對象
- 3. 將靜態類型的對象展開爲動態對象
- 4. Java代理 - >爲什麼代理對象像原始對象一樣hashCode
- 5. 動態從可擴展列表動態地開始活動
- 6. 當浮動對象在展開時展開浮動對象
- 7. 管理對象從原始結果中刪除無理由
- 8. 如何動態擴展對象?
- 9. 如何從動態行開始SUM()?
- 10. 從對象數組動態擴展表
- 11. 如何獲得擴展方法來更改原始對象?
- 12. ValueInjector與動態代理對象
- 13. 動態代理對象創建
- 14. 帶有動態代理對象的ComboBoxModel
- 15. 創建動態代理對象
- 16. jQuery UI - 將jQuery可拖動對象還原爲原始對象?
- 17. 如何動態處理java對象?
- 18. 從setInterval開始對象?
- 19. 從3d對象開始
- 20. 如何從CVImageBuffer對象中獲取原始數據
- 21. 如何從更復雜的對象中提取出原始值?
- 22. 如何從System.Drawing.Bitmap對象中提取原始圖像流?
- 23. 如何從Java中的String對象獲取原始字符串?
- 24. 如何獲得多處理來更改我的原始對象的狀態?
- 25. 如何從擴展代理向Apple Watch展示模態
- 26. 進度:如何創建原始對象
- 27. 我如何解開用createObject創建的原始Java對象()
- 28. Java/JSF/Tomcat/Spring - 代理對象有不同的方法比原始對象
- 29. 模擬對象調用原始動作
- 30. 從對象轉換爲原始類
這取決於你如何創建它。哪個庫? JDK代理?或者CGLIB/Javassist? – Bozho 2010-12-10 14:01:50
@Bozho:我已經更新了這個問題,以便更加精確 – MRalwasser 2010-12-10 14:04:14
這假設有一個原始對象。什麼'InvocationHandler'發送到'newProxyInstance()'? – 2010-12-10 14:42:50