2012-03-17 9 views
0

特定のメソッドを呼び出すObjectを識別できる必要があります。例えば、私はJavaで特定のメソッドを呼び出すオブジェクトを識別する方法はありますか?

JLabel l = new JLabel("Hello"); 
    JLabel label = new JLabel("HELLO"); 
    label.setText("BYE"); 

を以下しているのであれば、私は実際のsetTextではなくリットルを呼び出している変数ラベル内のオブジェクトを識別できるようにする必要があります。 メソッド情報を取得するためにSOOTを使用しているので、メソッドを呼び出すオブジェクトの型を取得できました。この場合はJLabelです。しかし、私が実際に必要とするのは、このメソッドを使用するオブジェクトです。

メソッドを呼び出す実際のオブジェクトを識別できる方法はありますか?

+1

究極の目標は何ですか? –

+0

特定のメソッドを呼び出して操作するGUIコンポーネントを取得する必要があります。たとえば、ラベル内のテキストの色を変更するなどですが、すべてのメソッド呼び出しやオブジェクトではなく、SOOT出力から取得するメソッド – ict1991

+0

基本的な問題は、オブジェクトはメソッドを呼び出さないということです。 *メソッド呼び出し*は何らかのオブジェクト内にあるかもしれませんが(おそらくあなたが意図したものです)、それを得るための適切な方法はありません(いくつかの*非常に*醜い呼び出しスタックダンプ調査を除いて、デバッグには有効ですが、コード)。 –

答えて

0

適切な方法はありません。メソッドにパラメータを渡して、何をすべきかを伝える必要があります。スタックにスニッフィングする必要はありません。

+0

GUIを持つシステムのコードを変更することはできません...私のシステムはこの指定されたシステムで動作する必要があります – ict1991

+0

それは意味をなさないです。このメソッドを変更しています。 – bmargulies

+0

@ ict1991変更できないコード(サブクラスとオーバーライド)にフックします。 – Java42

3

はい、あなたはリフレクションで電話をしている人を見つけることができます。これを行う方法の詳細については、このスタックのオーバーフローポスト:How do I find the caller of a method using stacktrace or reflection?を参照してください。

しかし、私はあなたが後の最終目標を達成するために必要なものよりもはるかに難しい方法で何かをしようとしていることに懸念します。誰が呼び出しているかを知る必要があるサブメソッドにパラメータとして「this」を渡すことができますか?

+0

私は他の誰かによって与えられた別のシステムに関する情報を知る必要のあるツールを構築していますので、システムを変更することはできません – ict1991

+0

反射を試み、私がどのように管理したかを教えてください... – ict1991

+0

一般的な反射に精通していますか? –

関連する問題