動的プロキシをアンラップして元のオブジェクトを取得するための最良の方法は何ですか? 動的プロキシは次を使用して作成されましたjava.lang.reflect.Proxy.newProxyInstance()
ありがとうございました。
動的プロキシをアンラップして元のオブジェクトを取得するための最良の方法は何ですか? 動的プロキシは次を使用して作成されましたjava.lang.reflect.Proxy.newProxyInstance()
ありがとうございました。
良い方法はありません: Proxy.getInvocationHandler(proxy) はハンドラーを返しますが、問題はハンドラーから元のオブジェクトを抽出することです。ハンドラーが匿名クラスの場合、元のオブジェクトを抽出する唯一の方法は、リフレクションを使用して、val$something という名前のフィールドから元のオブジェクトを抽出することです。これは非常に醜い方法です。より良い方法は、ゲッターを使用して非匿名ハンドラー クラスを作成することです。
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
各プロキシには がInvocationHandler
関連付けられています。プロキシの基礎となるオブジェクト (存在する場合InvocationHandler
)を知っているのは のみです。プロキシの作成を制御する場合は、必要な追加機能を備えた独自のプロキシを提供できます (つまり、基になるオブジェクトを開示できます)。運の。InvocationHandler
Proxy.getInvocationHandler(proxy) メソッドを使用して、元の InvocationHandler を取得できます。