0

Java の別のクラスでメソッドを呼び出しているオブジェクトの型を知りたいです。たとえば、次のようになります。

 class A{
   public A(){
     //..
   }
   public void method1{
      //here I'd like to find what's the type of the object which is calling this method 
   }
  }

  class B{
    public B(){
      A a = new A();
      a.method1();
     }
   }

  class C{
     public C(){
        A a = new A();
        a.method1();
     }
   }
4

2 に答える 2

4

これを行うには、コードへのメソッド呼び出し時にスタックを調べます。Thread.getStackTrace()を調べて、返された現在のスレッドを使用します。

Thread.currentThread()

スタック トレース配列をさかのぼって、呼び出し元のチェーンを特定できます。ただし、ドキュメントの警告に注意してください。

一部の仮想マシンでは、状況によっては、スタック トレースから 1 つまたは複数のスタック フレームが省略される場合があります。極端な場合、このスレッドに関するスタック トレース情報を持たない仮想マシンは、このメソッドから長さ 0 の配列を返すことが許可されます。

あなたのクラスのサブセットについて誰があなたに電話したかを知る必要がある場合は、クラスを変更して、いくつかのCaller/Calleeインターフェイスを実装し、メソッド シグネチャを次のように実装します。

public void doSomething(..., Caller caller);

呼び出し元のクラスが実装する場所Caller。そうすれば、比較的タイプセーフなメソッド呼び出しとパラメーターの受け渡しを強制できます。

于 2013-05-14T14:39:33.877 に答える
2

これを試して:

Thread.currentThread().getStackTrace()
于 2013-05-14T14:39:54.713 に答える