11

動的プロキシをアンラップして元のオブジェクトを取得するための最良の方法は何ですか? 動的プロキシは次を使用して作成されましたjava.lang.reflect.Proxy.newProxyInstance()

ありがとうございました。

4

3 に答える 3

16

良い方法はありません: Proxy.getInvocationHandler(proxy) はハンドラーを返しますが、問題はハンドラーから元のオブジェクトを抽出することです。ハンドラーが匿名クラスの場合、元のオブジェクトを抽出する唯一の方法は、リフレクションを使用して、val$something という名前のフィールドから元のオブジェクトを抽出することです。これは非常に醜い方法です。より良い方法は、ゲッターを使用して非匿名ハンドラー クラスを作成することです。

((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
于 2010-12-10T14:38:54.907 に答える
14

各プロキシには がInvocationHandler関連付けられています。プロキシの基礎となるオブジェクト (存在する場合InvocationHandler)を知っているのは のみです。プロキシの作成を制御する場合は、必要な追加機能を備えた独自のプロキシを提供できます (つまり、基になるオブジェクトを開示できます)。運の。InvocationHandler

于 2010-12-10T14:03:04.833 に答える
0

Proxy.getInvocationHandler(proxy) メソッドを使用して、元の InvocationHandler を取得できます。

于 2010-12-10T14:16:04.043 に答える