8

どのクラスが自分のメソッドを呼び出したかを確認するにはどうすればよいですか?

例: クラス A がクラス C で MethodB を使用する場合、関数は、クラス B が MethodB を呼び出す場合に関数が行うこと以外のことを行う必要があります。

メソッドにブール値などを追加することはできません。

4

6 に答える 6

6

これを行う良い方法はありません-そしてそれは基本的に悪い設計です、IMO。ClassA と ClassB で別の処理が必要な場合は、別のメソッドを呼び出す必要があります。

私の経験上、これが合理的なのは、基本的に呼び出し元のクラス名をロガー名の一部にしたい場合に、ロガーを初期化する簡単な方法を考えようとするときだけですこれを行う恐ろしい方法の 1 つは、例外をスローしてキャッチし、そのスタック トレースを調べることです。でも、できれば避け...

于 2013-11-08T13:29:06.030 に答える
5

呼び出しメソッドのクラスの名前を見つけることができます。これを達成する方法は次のとおりです。

class A {

    public void testMethodCall() {
        new C().testMethod();
    }
}

class B {
  public void testMethodCall() {
      new C().testMethod();
  }
}

class C {

    public void testMethod() {
        System.out.println("Called from class : " +Thread.currentThread().getStackTrace()[2].getClassName());
    }
}
public class Test
{
    public static void main(String args[]) {
        A a = new A();
        B b = new B();
        a.testMethodCall();
        b.testMethodCall();
    }

}

出力

クラスから呼び出される: A

クラスから呼び出される: B

このサンプル コードを使用して、必要に応じて調整できます。

于 2013-11-08T13:34:51.073 に答える